Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Деревья выражений. Зачем? 
:(
    Опции темы
Darkmaster
Дата 1.3.2009, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 22.11.2005

Репутация: нет
Всего: нет



Прочитал книгу Трея Неша о C# 3.0. Там рассказывается про деревья выражений. Но вот зачем они нужны я так и не понял пока. Можете просветить ? Для чего могут понадобится эти самые деревья?
--------------------
GeekTV - интернет-телевидение для гиков
PM MAIL   Вверх
WarHog
Дата 1.3.2009, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 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]
--------------------
PM MAIL   Вверх
source777
Дата 2.3.2009, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: нет
Всего: 56



Цитата(Darkmaster @  1.3.2009,  20:52 Найти цитируемый пост)
Для чего могут понадобится эти самые деревья? 
в первую очередь, для оптимизации.



--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
PashaPash
Дата 2.3.2009, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 4
Всего: 49



Цитата(source777 @  2.3.2009,  15:37 Найти цитируемый пост)
в первую очередь, для оптимизации.

оптимизации чего?


--------------------
PM MAIL WWW   Вверх
source777
Дата 2.3.2009, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: нет
Всего: 56



Цитата(PashaPash @  2.3.2009,  20:15 Найти цитируемый пост)
оптимизации чего? 

запросов к БД


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
PashaPash
Дата 2.3.2009, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 4
Всего: 49



Цитата(source777 @  2.3.2009,  21:41 Найти цитируемый пост)
запросов к БД 

Чем реализация именно на деревьях выражений оптимальнее любой другой реализации query object?


--------------------
PM MAIL WWW   Вверх
source777
Дата 2.3.2009, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: нет
Всего: 56



Цитата(PashaPash @  2.3.2009,  22:27 Найти цитируемый пост)
Чем реализация именно на деревьях выражений оптимальнее любой другой реализации query object? 
PashaPash, мы что на собеседовании? Есть желание развернуто ответить топикстартеру, так ответь...
А вкратце, деревьях выражений позволяют представить запрос в виде данных, а не кода, в этом и преимущество над классической реализацией паттерна query object.




--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
PashaPash
Дата 2.3.2009, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 4
Всего: 49



Цитата(source777 @  2.3.2009,  22:41 Найти цитируемый пост)
Есть желание развернуто ответить топикстартеру, так ответь...

Желания нет, да и топикастеру ручная работа с деревьями выражений не понадобиться скорее всего. Вообще WarHog был прав, они позволяют очень легко транслировать код на другие языки, преобразованием деревьев.
Цитата(source777 @  2.3.2009,  22:41 Найти цитируемый пост)
А вкратце, деревьях выражений позволяют представить запрос в виде данных, а не кода, в этом и преимущество над классической реализацией паттерна query object.

ExpressionTree - это и есть классическая реализация query object, просто с поддержкой со стороны framework-а.

ЗЫ А вдруг я действительно не знаю и хочу уточнить?

Это сообщение отредактировал(а) PashaPash - 2.3.2009, 22:59


--------------------
PM MAIL WWW   Вверх
source777
Дата 2.3.2009, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: нет
Всего: 56



Цитата(PashaPash @  2.3.2009,  22:58 Найти цитируемый пост)
ExpressionTree - это и есть классическая реализация query object, просто с поддержкой со стороны framework-а.
извиняюсь, под классической я имел в виду вариант из PoEAA каталога.

Цитата(PashaPash @  2.3.2009,  22:58 Найти цитируемый пост)
А вдруг я действительно не знаю и хочу уточнить?
Если б я тебя тут впервые видел, то может и поверил бы, что ты не можешь найти интересующую информацию самостоятельно... А так, не верю  smile 


Это сообщение отредактировал(а) source777 - 2.3.2009, 23:06


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
PashaPash
Дата 2.3.2009, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 4
Всего: 49



Цитата(source777 @  2.3.2009,  23:05 Найти цитируемый пост)
извиняюсь, под классической я имел в виду вариант из PoEAA каталога.

Там как раз и нарисован ExpressionTree. И вообще под нее попадает любое дерево, хоть как-то преобразующееся в sql. А простые Expression Tree можно прямо преобразовывать в sql, обычной рекурсией+string builder.
Цитата(source777 @  2.3.2009,  23:05 Найти цитируемый пост)
А так, не верю  smile

Надо зарегать другой ник. Pashakult, например.


--------------------
PM MAIL WWW   Вверх
source777
Дата 3.3.2009, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: нет
Всего: 56



Цитата(PashaPash @  2.3.2009,  23:25 Найти цитируемый пост)
Там как раз и нарисован ExpressionTree.
А как же класс Criteria, как-то он с ExpressionTree не очень вяжется... в том плане, что там как раз все алгоритмы преобразования в код зашиты.

Цитата(PashaPash @  2.3.2009,  23:25 Найти цитируемый пост)
Надо зарегать другой ник. Pashakult, например. 
Не, это лишнее, тут много людей, которые умеют поисковиками пользоваться smile 





--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
PashaPash
Дата 3.3.2009, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 4
Всего: 49



Цитата(source777 @  3.3.2009,  13:23 Найти цитируемый пост)
А как же класс Criteria, как-то он с ExpressionTree не очень вяжется... в том плане, что там как раз все алгоритмы преобразования в код зашиты.

Не зашиты. Там вбиты данные - оператор, поле и значение. На картинке нарисован самый простой случай. В случае 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. smile Просто реализация очень хорошая, глубоко вшитая в язык.


--------------------
PM MAIL WWW   Вверх
source777
Дата 3.3.2009, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: нет
Всего: 56



спасибо за пояснения


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | LINQ (Language-Integrated Query) | Следующая тема »


 




[ Время генерации скрипта: 0.1018 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.