我无法将以下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中轻松完成?我只想从数据库中选择一堆实体,不包括本地(非数据库)集合中的实体。