Мое понимание дерева выражений:
Деревья выражений являются представлением в оперативной памяти выражения как арифметическое или булево выражение. Выражения хранятся в проанализированный 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;}
}
Вопросы:
Microsoft использует Деревья выражений для проигрывания с LINQ-to-Sql. То, что является различными путями, может я использовать деревья выражений для повышения моего кода.
Кроме LINQ к SQL, Linq амазонке, которая использовала деревья выражений в их приложениях?
Linq для Возражения возврату IEnumerable Linq к SQL возвращают IQueryable, Что делает LINQ к возврату XML?
Деревья выражений предлагают способ проверки некоторого фрагмента кода до его фактической компиляции во время выполнения.
С деревом выражений можно сделать ровно две вещи:
Деревья выражений - это круто, но шансы на то, что они действительно имеют прямую полезность для типичного веб-сайта или корпоративного приложения, малы. Вы могли бы использовать их только тогда, когда (а) хотите сгенерировать другой тип кода из исходного кода C # во время выполнения или (б) хотите использовать Reflection, но обеспечить некоторую степень безопасности во время компиляции.
Если вы работаете над повторно используемыми библиотеками - фреймворками DI, фреймворками AOP, фреймворками MVC / MVP / MVVM, фреймворками ORM и т. Д., Или пытаетесь расширить одну из этих фреймворков (включая Linq-to-XYZ), то вы вероятно найдет применение для деревьев выражений (таких как Linq to SQL пакетное обновление расширение), хотя трудно обсуждать конкретные примеры, потому что это будет полностью зависеть от конструкции такого фреймворк.
Если вы не создаете инструменты такого рода, деревья выражений - не более чем любопытство.Конечно, приятно узнать о них, но не расстраивайтесь, если вы не найдете для них слишком много практических применений.
Несколько примеров библиотек, использующих деревья выражений:
... Это должно дать вам представление о том, какие проекты серьезно используют деревья выражений. Поэтому, если вы создаете свою собственную среду выполнения или MVC, вам определенно нужно изучить все, что можно. ;)
IEnumerable
s. Я бы рекомендовал прочитать некоторые статьи здесь: http://blogs.msdn.com/csharpfaq/archive/tags/expression+trees/default.aspx
Я написал их, чтобы ответить на вопросы, подобные этому. Я попытался дать основы и показать некоторые интересные трюки, которые можно делать с деревьями выражений за пределами LINQ и DLR.