"无法创建类型的常量值." 如何在LINQ查询中避免此错误?

Ano*_*use 0 c# linq linq-to-entities

我有这个方法:

public virtual IEnumerable<Invoice> GetHomePageInvoices(IList<Area> areas, FinancialYearLookup financialYear)
{
    var homePageInvoices = _db.Invoices.Where(x => areas.Any(z => z.Id == 3)).ToList();

    ...
}
Run Code Online (Sandbox Code Playgroud)

基本上我正在尝试找到该区域与参数区域中的任何区域匹配的任何发票.

我收到错误:

无法创建"Models.Area"类型的常量值.在此上下文中仅支持原始类型(例如Int32,String和Guid').

任何人都可以解释为什么会发生这种情况以及如何解决?

Bro*_*ass 5

您不能IList<Area>在Linq提供程序的上下文中使用an (可能是Linq to Entities) - 只需事先提取id并使用Contains对原语集合起作用的查询:

List<int> ids = areas.Select( x=> x.Id).ToList();
var homePageInvoices = _db.Invoices
                          .Where(x => ids.Contains(x.Id))
                          .ToList();
Run Code Online (Sandbox Code Playgroud)

另外我假设您不想与固定值进行比较3- 所以我相应地更改了您的查询 - 假设Invoice实体具有Id属性.