Конвертировать выражение Linq в sql statament. C # - PullRequest
0 голосов
/ 15 ноября 2011

У меня есть функция, которая принимает лямбда-выражение, которое я хочу преобразовать sql.

<T> List Search <T> (Expression <Func <T, bool>> criteria) {

  / / The idea is to create a SQL statement, based on criteria

}

Я не использую DataContext.Пожалуйста, не давайте ответ:

list.Where return (criteria.Compile ()). ToList <TClass> ();

пример:

<Contact> List Search <Contact> (c => c.id == 1 && new == c.birthday DateTime (2000,1,1))

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

Извините за английский, я учусь:)

Спасибо и наилучшими пожеланиями.*

Ответы [ 3 ]

6 голосов
/ 15 ноября 2011

Деревья выражений бесполезны,

Нет, это не так. Если вы хотите решить эту проблему самостоятельно, не используя существующий код, вам нужно разорвать дерево выражений, чтобы преобразовать его в SQL (посетитель дерева выражений). Деревья выражений - это то, как лямбда-выражения в коде будут представлены вам как данные во время выполнения.

Я пытался и нашел это невозможным.

Это не невозможно, но и не легко. Просто взгляните на реализацию NHibernate. 1. Вы увидите, что это возможно. 2. Вы увидите, что это много работы.

Почему вы изобретаете велосипед?

2 голосов
/ 15 ноября 2011

Поскольку вы берете выражение, вы в значительной степени заставляете себя идти по пути синтаксического анализа дерева выражений.

Если вы хотите узнать, зачем вам контекст, и начать изучать, как анализировать дерево выраженийна основе метаданных из контекста, см. серию блогов Мэтта Уоррена, начинающуюся с http://blogs.msdn.com/b/mattwar/archive/2007/07/30/linq-building-an-iqueryable-provider-part-i.aspx.

. Как только вы закончите это переваривать, посмотрите серию Франца Бума о разработке LINQ для LLBLGEN: http://weblogs.asp.net/fbouma/archive/2007/09/11/developing-linq-to-llblgen-pro-day-0.aspx.

0 голосов
/ 15 ноября 2011

У вас есть Expression <Func <T, bool>> criteria, написанный программистом.Заставь этого программиста написать sql!

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