我正在努力编写一个linq查询。
我有已修改的产品列表A,所以我试图从数据库中获取产品列表,以允许我将更改应用到它们。
我尝试了两种不同的查询
var query = from p in db.Products
where products.Select(z => z.id).Contains(p.Id)
select p;
var query2 = from p in db.Products where (from o in products
select o.id)
.Contains(p.Id)
select p;
两次尝试都返回错误
base {System.SystemException} = {“无法创建类型为'ProjectABC.Models.ProductModel'的常量值。在此上下文中仅支持基本类型(如Int32,String和Guid')。” }
我做错了什么?
答案 0 :(得分:2)
前几天我遇到了同样的问题,似乎EF不支持Select()。包含()而没有给出错误。经过一段时间的测试后,我最终将它分解为你的情况对应的内容;
var IDs = products.Select(z=>z.id);
var query = from p in db.Products
where IDs.Contains(p.Id)
select p;
在我的情况下,无论如何“产品”集合在内存中都很有效(即数据库的ToList()'ed结果)