преобразовать linq в объектный запрос в sql запрос (без linq в sql код или datacontext) - PullRequest
2 голосов
/ 24 июля 2011

Как я могу преобразовать linq в объектный запрос или любой другой делегат Func в строку, например операторы sql

, например

var cat_list = new List<Cat> { ... };

var myquery = cat_list.Where(x => x.Age > 2 && x.Name.Contains("Kitty"));

Теперь myquery IEnumerable<Cat>.Как я могу преобразовать это в просто что-то вроде этого

"Age > @p1 AND Name LIKE @p2"

Как я могу добиться этого ??

Ответы [ 3 ]

2 голосов
/ 24 июля 2011

Делать что-то подобное не просто. Взгляните на серию статей Создание поставщика IQueryable Мэтта Уоррена. Весь код, который он использует, также доступен в виде библиотеки. Это должно помочь вам начать.

1 голос
/ 24 июля 2011

Вы можете написать синтаксический анализатор дерева выражений и сгенерировать sql. Ваше описание содержит ошибку - myquery не IQueryable<Cat>, это IEnumerable<Cat>. Как вы правильно отметили, это linq-to-objects, а не linq-to-sql. В вызовах нет информации для построения запроса.

0 голосов
/ 25 июля 2011

Проверьте метод DataContext.GetCommand (), которому передается объект IQueryable и возвращается объект DbCommand, соответствующий запросу. Свойство CommandText объекта DbCommand показывает текст запроса.

...