Где используются деревья выражений

161
05 октября 2018, 21:20

Наткнулся на довольно интересную и сложную тему под названием "Деревья выражений". Изучил несколько примеров по этой теме - у меня возник вопрос: "К чему такое издевательство?"
Я так понимаю, они использовались когда еще не было лямбы, анонимных функций и т.д.? Если нет, то в чём их суть и где они могут быть полезны и необходимы? Буду благодарен за парочку примеров.

Answer 1

Представьте, что у вас есть linq-запрос c where и условие во where конструируется на лету. Если бы не было деревьев выражений - то where будет выполняться на клиенте (AsEnumerable, а не AsQueryable).

Но если компилятор сумеет разобрать выражение - то он сможет сделать фильтрацию сделать прямо на сервере (см. этот ответ и кликайте на ссылки в этом ответе), а не тащить миллионы записей по сети и не фильтровать их в оперативке на клиенте. И это очень ценный кейс, потому что производительность очень сильно зависит от сети.

В чём ценность выражений: их можно разобрать на отдельные элементарные части, затем передать серверу и он их обратно соберёт, скомпилирует под себя, используя свои конструкции. Типа string.Contains из шарпа заменит на sql-ный like, условия "или" соберёт в том же порядке и т.п.

READ ALSO
Конвертировать MS-DOS time format

Конвертировать MS-DOS time format

Нужно конвертировать байты MS-DOS time полученные с устройства 17 86 FF 4C в обычный читаемый форматПробовал таблицу http://www

202
Применение модификаторов virtual/override

Применение модификаторов virtual/override

Приведите, пожалуйста, хотя бы один реальный пример использования модификаторов virtual/override, где модификаторы virtual/ovveride оказываются действительно...

141
Вернуть Enum или Class из Dictionary<string, object>

Вернуть Enum или Class из Dictionary<string, object>

Помогите адаптировать методы для C# из Java (методы используются в расширении базового DictionaryТема здесь

140