![]() |
Модераторы: gambit |
![]() ![]() ![]() |
|
Darkmaster |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 148 Регистрация: 22.11.2005 Репутация: нет Всего: нет |
Прочитал книгу Трея Неша о C# 3.0. Там рассказывается про деревья выражений. Но вот зачем они нужны я так и не понял пока. Можете просветить ? Для чего могут понадобится эти самые деревья?
--------------------
GeekTV - интернет-телевидение для гиков |
|||
|
||||
WarHog |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 20.10.2007 Где: Воронеж Репутация: 1 Всего: 2 |
"Такой подход (дерево выражений - Expression Tree) позволяет в ходе компиляции или выполнения разобрать любым другим интерпретатором полученное AST (Abstract Syntactic Tree) и реализовать запрос к определенным данным. Именно по такому принципу и работают различные реализации LINQ, например, LINQ 2 SQL и LINQ 2 XML."
[email=http://rsdn.ru/article/csharp/Csharp3_Linq.xml?print]Статья на rsdn[/email] --------------------
|
|||
|
||||
source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: нет Всего: 56 |
в первую очередь, для оптимизации.
-------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 4 Всего: 49 |
||||
|
||||
source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: нет Всего: 56 |
-------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 4 Всего: 49 |
Чем реализация именно на деревьях выражений оптимальнее любой другой реализации query object? |
|||
|
||||
source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: нет Всего: 56 |
А вкратце, деревьях выражений позволяют представить запрос в виде данных, а не кода, в этом и преимущество над классической реализацией паттерна query object. -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 4 Всего: 49 |
Желания нет, да и топикастеру ручная работа с деревьями выражений не понадобиться скорее всего. Вообще WarHog был прав, они позволяют очень легко транслировать код на другие языки, преобразованием деревьев.
ExpressionTree - это и есть классическая реализация query object, просто с поддержкой со стороны framework-а. ЗЫ А вдруг я действительно не знаю и хочу уточнить? Это сообщение отредактировал(а) PashaPash - 2.3.2009, 22:59 |
|||
|
||||
source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: нет Всего: 56 |
Если б я тебя тут впервые видел, то может и поверил бы, что ты не можешь найти интересующую информацию самостоятельно... А так, не верю ![]() Это сообщение отредактировал(а) source777 - 2.3.2009, 23:06 -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 4 Всего: 49 |
Там как раз и нарисован ExpressionTree. И вообще под нее попадает любое дерево, хоть как-то преобразующееся в sql. А простые Expression Tree можно прямо преобразовывать в sql, обычной рекурсией+string builder. Надо зарегать другой ник. Pashakult, например. |
|||
|
||||
source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: нет Всего: 56 |
А как же класс Criteria, как-то он с ExpressionTree не очень вяжется... в том плане, что там как раз все алгоритмы преобразования в код зашиты.
Не, это лишнее, тут много людей, которые умеют поисковиками пользоваться ![]() -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 4 Всего: 49 |
Не зашиты. Там вбиты данные - оператор, поле и значение. На картинке нарисован самый простой случай. В случае ExpressionTree будет сложнее это MethodCall для IQuerable.Where c BinaryExpression с параметрами MemberExpression и ConstantExpression. Код, который превращает это в sql практически одинаковый. A Query Object is an interpreter, that is, a structure of objects that can form itself into a SQL query. You can create this query by refer-ring to classes and fields rather than tables and columns. ExpressionTree - это структура объектов, ссылающаяся на классы и поля. В случе IQuerable над нужным провайдером - преобразующая себя в SQL. ![]() |
|||
|
||||
source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: нет Всего: 56 |
спасибо за пояснения
-------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | LINQ (Language-Integrated Query) | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |