IEnumerable.Except不会工作,所以我该怎么办?

时间:2008-12-01 16:29:38

标签: c# linq

我有一个linq到sql数据库。非常简化,我们有3个表,项目和用户。有一个名为User_Projects的连接表将它们连接在一起。

我已经有了一种为给定用户获取IEnumberable<Project>的工作方法。

from up in User_Projects
select up.Project;

现在我想获取用户所涉及的项目。我认为IEnumerable的except方法在这里会很不错:

return db.Projects.Except(GetProjects());

编译,但是我得到一个运行时错误:“除了Contains()运算符之外,本地序列不能用于查询运算符的LINQ to SQL实现。”

有没有办法解决这个问题?


更新

一些观点但没有答案:p

我试过这个:

        IEnumerable<Project> allProjects = db.Projects;
        IEnumerable<Project> userProjects = GetProjects();
        return allProjects.Except(GetProjects());

我知道它与原始语句基本相同 - 但现在我没有遇到运行时错误。不幸的是,它并没有真正做除了部分而只是返回所有项目,出于某种原因

3 个答案:

答案 0 :(得分:6)

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;

答案 1 :(得分:3)

您可以尝试像

这样简单的事情
User u = SomeUser;

from up in User_Projects
where up.User != u
select up.Project;

答案 2 :(得分:0)

试试这个:

var userProjects = GetProjects();
return db.Projects.Except(userProjects.ToArray());

ToArray应强制评估序列(如果我正确理解问题)并允许操作成功。