Лямбда-выражение сравнивает логическое значение как ложное в NotSupportedException - PullRequest
2 голосов
/ 16 декабря 2011

Я не могу понять, как сравнивать логические значения в лямбда-выражении C # для EF4. Я пробовал:

cl.Where(c => c.Received == false);

и это:

cl.Where(c => !c.Received);

и это:

cl.Where(c => c.Received.Equals(false));

но я продолжаю получать эту ошибку:

Exception Details: System.NotSupportedException: Unable to create a constant value
of type 'System.Object'. Only primitive types ('such as Int32, String, and Guid')
are supported in this context.

Потратив много времени на изучение этого, я все еще что-то упускаю. Я довольно новичок в Lambdas, поэтому указатели будут оценены.

Edit2: больше кода re: comment

int bar = 42;
var cl = db.foo.Where(c => c.baz.Equals(bar));
//codez (just an if statement)
cl.Where(c => c.Received == false).OrderByDescending(c => c.dateAdded);

Вот и все. Даже если я уберу заказ, он все равно не будет работать

Edit3:

Решение:

int bar = 42;
var cl = db.foo.Where(c => c.baz == bar);
cl.Where(c => c.Received == false).OrderByDescending(c => c.dateAdded);

Ответы [ 2 ]

3 голосов
/ 16 декабря 2011

Скорее всего, проблема в строке c.baz.Equals(bar). Если вы измените его на

var cl = db.foo.Where(c => c.baz.Equals(bar)).ToList();

вы должны увидеть исключение в этой строке, потому что вы форсируете оценку IQueryable<T>.

Вместо сравнения объектов вы должны сравнить их идентификаторы, например:

(отредактировано для отражения разговора в комментариях и изменениях в ОП)

var cl = db.foo.Where(c => c.baz == bar.id);
0 голосов
/ 16 декабря 2011

Какой тип Received? Where close нужен предикат (функция, возвращающая логическое значение), чтобы воздействовать на каждый элемент в списке и возвращать те, которые удовлетворяют условию. Из сообщения об ошибке кажется Received в не примитивном типе. Вам нужно привести его к логическому значению, если вы точно знаете его логическое значение.

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