【问题标题】:How to use generic collections together with LINQ-to-entities如何将泛型集合与 LINQ-to-entities 一起使用
【发布时间】:2010-10-22 10:48:40
【问题描述】:

我在将以下 SQL 语句转换为 LINQ-to-entities 时遇到问题:

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;

但这不起作用,因为 Contains 在 LINQ-to-entities 中不可用(如我所见)。在我最好/最接近的 LINQ 尝试中,我有我的位置集合(一个列表),我有一个 DataContext,它从数据库中检索所有现有的位置:

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;

显然我想从数据库中获取不在我本地集合中的所有位置。但是代码会引发 NotSupportedException 声明:

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

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

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

【问题讨论】:

  • 欢迎使用 LINQ-to-Entities,它是功能不足的 LINQ-to-SQL 的替代品...
  • 我在这里提出了类似的转换问题; stackoverflow.com/questions/4093592/… 我还没有解决这个问题。看来您可以在 LinqToSql 中执行许多您无法在 EF 中执行的操作。这很烦人/令人失望。你的问题有点不同,但最终结果是相似的。我希望你比我更成功。

标签: c# linq linq-to-entities


【解决方案1】:

试试这个帖子: "NOT IN" clause in LINQ to Entities

【讨论】:

  • 感谢您提供的链接,我找到了前往blogs.msdn.com/phaniraj/archive/2008/07/17/… 的方法。我可能会这样工作,但是天哪(当然没有冒犯!),难道没有更简单的方法来做这种微不足道的事情吗?
猜你喜欢
  • 1970-01-01
  • 2010-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多