在linq查询中使用.Contains返回SystemException

时间:2012-02-04 21:44:26

标签: linq entity-framework

我正在努力编写一个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')。” }

我做错了什么?

1 个答案:

答案 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结果)