【发布时间】:2015-07-02 08:43:26
【问题描述】:
我想返回当前处于给定状态之一的工单列表。有一个枚举 TicketState 数组(其值为 Open、InProgress 和 Finished)。
public IEnumerable<Ticket> ReadTickets(TicketState[] states)
{
return ctx.Tickets.Where(t => states.Contains(t.State)).AsEnumerable();
}
我测试方法时出现如下异常:
无法比较“Project.BL.Domain.Ticketing.TicketState[]”类型的元素。仅支持原始类型、枚举类型和实体类型。
我尝试从数组中创建一个列表并改用字节数组,但我不断收到异常。
有谁知道我该如何解决这个问题?
【问题讨论】:
-
该代码甚至无法编译 -
states.Contains(t.State)不是委托或表达式树类型...现在我们可以猜测您刚刚错过了state =>但谁知道还有什么其他变化... -
stackoverflow.com/questions/16615803/…, stackoverflow.com/questions/15211362/…, stackoverflow.com/questions/15592042/…, stackoverflow.com/questions/7379394/…, 尝试搜索。 EF 无法将该 LINQ 转换为 SQL 查询。这是哪个EF版本?
Ticket.State是如何声明的? -
@JonSkeet,
Contains绝对可以收到一个T并检查它是否存在。无需委托或表达式。 -
谢谢,我已经编辑过了。
-
@haim770
(t => Foo(t))的简写形式为(Foo),但不像 OP 那样。
标签: c# arrays linq entity-framework enums