Дерево выражений

Мое понимание дерева выражений:

Деревья выражений являются представлением в оперативной памяти выражения как арифметическое или булево выражение. Выражения хранятся в проанализированный tree.so, мы можем легко трансимеющий крылья на любой другой язык.

Linq to SQL дерево выражений использования. Обычно в LINQ to SQL запрос компилятор переводит его в проанализированные деревья выражений. Они передаются SQL-серверу как Операторы T-SQL. SQL-сервер выполняет запрос T-SQL и отправляет вниз результат назад. Именно поэтому, когда Вы выполняетесь LINQ to SQL Вы добирается IQueryable<T> нет IEnumetrable<T>.Because IQuerybale содержит

public IQueryable:IEnumerable
{

   Type Element {get;}
   Expression Expression {get;}
   IQueryaleProvider Provider {get;}
}

Вопросы:

  1. Microsoft использует Деревья выражений для проигрывания с LINQ-to-Sql. То, что является различными путями, может я использовать деревья выражений для повышения моего кода.

  2. Кроме LINQ к SQL, Linq амазонке, которая использовала деревья выражений в их приложениях?

  3. Linq для Возражения возврату IEnumerable Linq к SQL возвращают IQueryable, Что делает LINQ к возврату XML?

5
задан David Brown 28 March 2010 в 17:04
поделиться

3 ответа

Деревья выражений предлагают способ проверки некоторого фрагмента кода до его фактической компиляции во время выполнения.

С деревом выражений можно сделать ровно две вещи:

  • Скомпилировать его в делегат, используя Expression.Compile , или
  • посетить узлы дерева и сгенерировать из него что-нибудь еще (т. Е. оператор SQL).

Деревья выражений - это круто, но шансы на то, что они действительно имеют прямую полезность для типичного веб-сайта или корпоративного приложения, малы. Вы могли бы использовать их только тогда, когда (а) хотите сгенерировать другой тип кода из исходного кода C # во время выполнения или (б) хотите использовать Reflection, но обеспечить некоторую степень безопасности во время компиляции.

Если вы работаете над повторно используемыми библиотеками - фреймворками DI, фреймворками AOP, фреймворками MVC / MVP / MVVM, фреймворками ORM и т. Д., Или пытаетесь расширить одну из этих фреймворков (включая Linq-to-XYZ), то вы вероятно найдет применение для деревьев выражений (таких как Linq to SQL пакетное обновление расширение), хотя трудно обсуждать конкретные примеры, потому что это будет полностью зависеть от конструкции такого фреймворк.

Если вы не создаете инструменты такого рода, деревья выражений - не более чем любопытство.Конечно, приятно узнать о них, но не расстраивайтесь, если вы не найдете для них слишком много практических применений.

Несколько примеров библиотек, использующих деревья выражений:

... Это должно дать вам представление о том, какие проекты серьезно используют деревья выражений. Поэтому, если вы создаете свою собственную среду выполнения или MVC, вам определенно нужно изучить все, что можно. ;)

11
ответ дан 18 December 2019 в 11:55
поделиться
  1. Что вы подразумеваете под «усилением моего кода»?
    Деревья выражений (обычно) не повышают производительность; они используются для включения дополнительных функций.
  2. Деревья выражений не имеют ничего общего с LINQ. Например, они используются системами внедрения зависимостей для эффективного определения типов и функций.
  3. LINQ to XML возвращает IEnumerable s.
3
ответ дан 18 December 2019 в 11:55
поделиться

Я бы рекомендовал прочитать некоторые статьи здесь: http://blogs.msdn.com/csharpfaq/archive/tags/expression+trees/default.aspx

Я написал их, чтобы ответить на вопросы, подобные этому. Я попытался дать основы и показать некоторые интересные трюки, которые можно делать с деревьями выражений за пределами LINQ и DLR.

1
ответ дан 18 December 2019 в 11:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: