IEnumerable.Except不会工作,所以我该怎么办?
我有一个linq to sql数据库。 非常简化,我们有3个表,项目和用户。 有一个名为User_Projects的连接表将它们连接在一起。
我已经有了一个为给定用户获取IEnumberable
的工作方法。
from up in User_Projects select up.Project;
现在我想获得用户没有参与的项目。 我认为IEnumerable的except方法在这里会很不错:
return db.Projects.Except(GetProjects());
编译,但是我得到一个运行时错误:“除了Contains()运算符之外,本地序列不能用于查询运算符的LINQ to SQL实现。”
有没有办法解决这个问题?
更新:
一些观点,但没有答案:p
我试过这个:
IEnumerable allProjects = db.Projects; IEnumerable userProjects = GetProjects(); return allProjects.Except(GetProjects());
我知道它与原始语句基本相同 – 但现在我没有得到运行时错误。 不幸的是,它并没有真正做除了部分而只是返回所有项目,出于某种原因
Linq to Sql不了解如何使用任意内存中的对象序列。 您需要以关系术语表达这一点,这些术语适用于ID:
var userProjectIds = from project in GetProjects() select project.ProjectId; var nonUserProjects = from project in db.Projects where !userProjectIds.Contains(project.ProjectId) select project;
你可以尝试一些简单的东西
User u = SomeUser; from up in User_Projects where up.User != u select up.Project;
试试这个:
var userProjects = GetProjects(); return db.Projects.Except(userProjects.ToArray());
ToArray应强制评估序列(如果我正确理解问题)并允许操作成功。