2015-07-02 156 views
3

我想返回当前处于给定状态之一的票证列表。有一个枚举TicketState的数组(值为Open,InProgress和Finished)。Linq包含枚举数组

无法比较类型 'Project.BL.Domain.Ticketing.TicketState []' 的元素:

public IEnumerable<Ticket> ReadTickets(TicketState[] states) 
{ 
    return ctx.Tickets.Where(t => states.Contains(t.State)).AsEnumerable(); 
} 

以下异常当我测试方法出现。只支持原始类型,枚举类型和实体类型。

我试着从数组中创建一个列表,并使用一个字节数组来替代,但我不断收到异常。

有谁知道我该如何解决这个问题?

+1

该代码甚至不会编译 - “states.Contains(t.State)'不是委托或表达式树类型...现在我们可以猜测你刚刚错过了'国家=>'但谁知道还有什么其他的变化... –

+0

http://stackoverflow.com/questions/16615803/only-primitive-types-or-enumeration-types-are-supported-in-this-context ,http://stackoverflow.com/questions/15211362/only-primitive-types-or-enumeration-types-are-supported-in-this-context,http://stackoverflow.com/questions/15592042/linq-to -entities-only-primitive-types-or-enumeration-types-are-supported-error,http://stackoverflow.com/questions/7379394/entity-framework-unable-to-create-a-constant-value-of类型异常,请尝试搜索。 EF无法将该LINQ转换为SQL查询。哪个EF版本是这个?如何声明Ticket.State? – CodeCaster

+0

@JonSkeet,'Contains'肯定会收到一个'T'并检查它的存在。不需要委托或表达。 – haim770

回答

3

您是否在寻找Enumerable.Any

return ctx.Tickets.Where(t => states.Any(s => t.State == s)).AsEnumerable(); 
+0

谢谢,现在问题解决了:) – Jens