Динамический запрос LINQ не работает с пользовательским классом! - PullRequest
0 голосов
/ 29 июля 2010

DynamicObject LINQ-запрос со списком прекрасно компилируется:

List<string> list = new List<string>();
var query = (from dynamic d in list where d.FirstName == "John" select d);

С нашим собственным пользовательским классом, который мы используем для «обычного» компилятора LINQ, сообщает об ошибке » Дерево выражений может не содержатьдинамическая операция":

DBclass db = new DBclass ();var query = (из динамического d в db, где d.FirstName == «Джон» выбирает d);

Что мы добавим для обработки DynamicObject LINQ?

Ответы [ 3 ]

1 голос
/ 29 июля 2010

DBClass реализует IEnumerable?Возможно, есть метод, который вы должны вызывать для возврата коллекции IEnumerable?

0 голосов
/ 30 июля 2010

Я полагаю, что ваша проблема в том, что в первом выражении, где вы используете List <>, все делается в памяти с помощью IEnumerable & Link-to-Objects.

Очевидно, ваш DBClassявляется IQueryable с использованием Linq-to-SQL.IQueryables использует дерево выражений для построения оператора SQL для отправки в базу данных.

Другими словами, несмотря на то, что эти операторы выглядят одинаково, они делают совершенно разные вещи, одно из которых разрешено, а другое - нетт.(Многое из того, что var y = x * 5; будет либо успешным, либо неудачным, в зависимости от того, является ли x целым или строковым).

Кроме того, ваш первый пример может скомпилироваться, но, насколько я могу судить, онпотерпит неудачу, когда вы запустите его.Это не очень хороший критерий успеха.

Единственный способ, с помощью которого я вижу эту работу, - это если запрос с использованием dynamic выполняется для IEnumerables с использованием Link-to-Objects.(Загрузите полную таблицу в список, а затем запросите список)

0 голосов
/ 29 июля 2010

Вы можете добавить тип, для которого вы хотите написать запрос.

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