我似乎无法弄清楚如何比较EF4的C#lambda表达式中的布尔值。我试过了:
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很新,所以pointers会受到赞赏。
编辑2:更多代码:评论
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);
答案 0 :(得分:3)
问题最有可能发生在c.baz.Equals(bar)
行。如果将其更改为
var cl = db.foo.Where(c => c.baz.Equals(bar)).ToList();
你应该看到在该行上抛出的异常,因为你强制评估IQueryable<T>
。
您应该比较它们的ID,而不是比较对象,如下所示:
(编辑以反映评论中的对话和对OP的更改)
var cl = db.foo.Where(c => c.baz == bar.id);
答案 1 :(得分:0)
Received
的类型是什么? Where
close需要一个谓词(一个返回布尔值的函数),以便对列表中的每个元素进行操作并返回满足条件的那些元素。从错误消息看,Received
似乎不是基本类型。如果你肯定知道它的布尔值,你需要将它强制转换为布尔值。