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应强制评估序列(如果我正确理解问题)并允许操作成功。