Используйте текстовые представления выражений LINQ - PullRequest
3 голосов
/ 29 декабря 2010

В моем проекте я использую много выражений LINQ и позволил бы пользователям вводить свои собственные запросы, набирая запрос linq в текстовом поле

Итак, возможно ли создать выражение LINQтекст, содержащий этот?И, кроме того, возможно ли получить текстовый эквивалент запроса linq?(например, из FOO в баре выберите foo)

Спасибо заранее

Ответы [ 4 ]

5 голосов
/ 29 декабря 2010

Вы можете попробовать NLinq : http://nlinq.codeplex.com

2 голосов
/ 29 декабря 2010

Если бы вы взялись за эту задачу, вы, по сути, выполняли бы работу компилятора (взятие текстового представления выражения и создание из него дерева выражений. Это большая работа и, вероятно, не стоит вашего времениПервая мысль, которая приходит на ум, - это иметь в запросе linq другой тип, а затем компилировать его на лету. Очевидным недостатком этого является то, что как только сборка загружается в память, вы не можете ее выгрузить (если вы неначать использовать AppDomains), так что это в основном приведет к утечке памяти.

Поскольку вы используете Entity Framework, лучшим ответом, вероятно, будет использование ESQL, http://innocraft.spaces.live.com/blog/cns!919A8CAC315ADF82!239.entry. С этим всегда можно работать втекстовый формат и Entity Framework проанализирует его для вас и выполнит запрос во время выполнения.

HTH

0 голосов
/ 30 декабря 2010

Вы также можете рассмотреть Dynamic LINQ. Он все еще в комплекте с VS2010 (где-то в папке Samples), хотя и не очень хорошо документирован. Здесь есть краткое вступление:

http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

0 голосов
/ 29 декабря 2010

Возможно ли, что вы могли бы дать своим пользователям копию LinqPad (которая бесплатна), и они могут создавать свои собственные запросы, а также видеть текстовый эквивалент SQL?

LinqPad можно найти здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...