Какова точно точка Деревьев выражений?

Хорошо, я просто не получаю его.

Я читал приблизительно столько же, сколько я могу на предмете, не зная то, о чем это - все:

  • Почему Деревья выражений использования?
  • Что такое реальный пример того, когда и как я использовал бы их?
  • Какое общее преимущество (преимущества) находятся там в использовании их?
9
задан IAmAN00B 28 July 2010 в 09:33
поделиться

6 ответов

API деревьев выражений изначально был написан для создания настраиваемых поставщиков LINQ. По сути, если вы используете LINQ to Objects, вы не имеете дело с деревьями выражений. Но если вы работаете с LINQ to SQL, то поставщик LINQ работает с деревьями выражений.

В .Net 4.0 API деревьев выражений был расширен и активно используется DLR. Итак, если вы, скажем, собираетесь добавить новый динамический язык в .NET, он вам понадобится.

Как это часто бывает, люди нашли больше способов использовать деревья выражений. Иногда вы можете использовать ET для получения дополнительной информации об объектах вместо отражения. В .NET 4 вы также можете использовать их для создания динамических методов. Но помните, что это больше похоже на продвинутые приемы, чем на рекомендуемые сценарии.

Вот несколько ссылок, на которые вы можете взглянуть:

Основы дерева выражений

Получение информации об объектах, типах и членах с деревьями выражений

Создание динамических методов с деревьями выражений в Visual Studio 2010

3
ответ дан 3 November 2019 в 01:52
поделиться

Дерево выражений - это, по сути, проанализированный фрагмент кода, обрабатываемый для вас как данные. Затем ваша программа может интерпретировать эти данные по своему усмотрению во время выполнения. Это позволяет интерпретировать код в свете вашей бизнес-логики.

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

3
ответ дан 3 November 2019 в 01:52
поделиться

Они весьма полезны. Помимо linq to sql, они используются для создания строго типизированных помощников html в mvc 2.0 или для предоставления средств использования графического процессора для математических вычислений, например проекта Brahma .

Обычно деревья выражений дают возможность интерпретировать скомпилированное выражение вместо его выполнения. Таким образом, они являются средством создания своего рода DSL на C #.

0
ответ дан 3 November 2019 в 01:52
поделиться

Они действительно очень полезны.

Каждое лямбда-выражение может стать методом или деревом выражения.

Очевидно, что методы выполняются встроенными в структуру.

Деревья выражений могут быть переведены в другое представление. Например, LINQ для SQL преобразует выражения запроса в синтаксис SQL и выполняет их удаленно на сервере.

2
ответ дан 3 November 2019 в 01:52
поделиться

Предположим, что вы пишете поставщик запросов для LINQ (например, поставщик SQL Server, который переводит запросы LINQ в SQL) - возможно, вы являетесь поставщиком БД и хотите реализовать поддержку своего механизма БД. Вы использовали бы деревья выражений для построения своего sql.

0
ответ дан 3 November 2019 в 01:52
поделиться

Когда вы пишете что-то вроде этого:

var q = from d in Data.Table
        where d.Name == "SomeName"
        select d

Это преобразуется в дерево выражений. Когда вы используете этот linq-запрос против SQL, подложка Linq-to-SQL использует это дерево для создания высокопроизводительного SQL-запроса.

Таким образом, он используется "за сценой", когда вы выполняете linq-запросы.

Вы можете строить свои собственные деревья выражений. Это может быть очень полезно, если вы хотите делать динамические запросы. Это могут быть различные критерии поиска. Вы даже можете использовать его для создания множественных внутренних объединений с пунктами "где" и другими интересными вещами, даже не зная заранее используемых типов. Однако это требует некоторых размышлений.

2
ответ дан 3 November 2019 в 01:52
поделиться
Другие вопросы по тегам:

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