我有这个方法:
public virtual IEnumerable<Invoice> GetHomePageInvoices(IList<Area> areas, FinancialYearLookup financialYear)
{
var homePageInvoices = _db.Invoices.Where(x => areas.Any(z => z.Id == 3)).ToList();
...
}
基本上我正在尝试查找区域与参数区域中的任何区域匹配的任何发票。
我收到了错误:
无法创建“Models.Area”类型的常量值。只要 支持原始类型(例如Int32,String和Guid') 这个背景。
任何人都可以解释为什么会发生这种情况以及如何解决?
答案 0 :(得分:5)
您不能在Linq提供程序的上下文中使用IList<Area>
(可能是Linq to Entities) - 只需事先提取id并使用Contains
查询,该查询可以处理基元集合:< / p>
List<int> ids = areas.Select( x=> x.Id).ToList();
var homePageInvoices = _db.Invoices
.Where(x => ids.Contains(x.Id))
.ToList();
此外,我假设您不想与3
的固定值进行比较 - 所以我相应地更改了您的查询 - 前提是Invoice
实体具有Id属性。
答案 1 :(得分:0)