如何将泛型集合与LINQ-to-entities一起使用

时间:2009-04-28 22:02:36

标签: c# linq linq-to-entities

我无法将以下SQL语句转换为LINQ到实体:

SELECT l.*
FROM locations l
WHERE l.id NOT IN (/* array of ids */)

在LINQ中,我希望看到类似的内容(其中myCollection是要排除的项的通用列表):

IQueryable<Location> locationQuery = from l in DataContext.Location
                                     where !myCollection.Contains(l)
                                     select l;

但这不起作用,因为在LINQ到实体中没有Contains(我看到它)。在我最好/最接近的LINQ尝试中,我有我的Locations集合(一个List),我有一个DataContext,它从数据库中检索所有现有的Locations:

List<Location> Route = new List<Location>();

// Some code to add Location entities from the DB to the Route collection

var innerQuery = from p in Route
                 select p.ID;

IQueryable<Location> locationQuery = from l in DataContext.Location
                                     where !((innerQuery).Any(k => k == l.ID))
                                     select l;

显然,我希望从DB中获取所有不在我本地集合中的位置。但是,代码将引发NotSupportedException,声明:

无法创建“闭包类型”类型的常量值。在此上下文中仅支持原始类型(例如Int32,String和Guid')。

我已经摆弄它,使用不同的方法,但我无法让它工作。现在我已经读过LINQ-to-entities不能进行高级比较(对象级别),这可能解释了上面的错误。

我的实际问题是,我如何在LINQ中做什么,我可以在SQL中轻松完成?我只想从数据库中选择一堆实体,不包括本地(非数据库)集合中的实体。

1 个答案:

答案 0 :(得分:2)

试试这篇文章: "NOT IN" clause in LINQ to Entities