C# 我数不清。除了不起作用,我该怎么办?
我有一个linq到sql数据库。非常简单,我们有3个表、项目和用户。有一个称为User_Projects的连接表,将它们连接在一起 我已经有了一种为给定用户获取C# 我数不清。除了不起作用,我该怎么办?,c#,linq,C#,Linq,我有一个linq到sql数据库。非常简单,我们有3个表、项目和用户。有一个称为User_Projects的连接表,将它们连接在一起 我已经有了一种为给定用户获取IEnumerable的工作方法 from up in User_Projects select up.Project; 现在我想得到用户不参与的项目。我认为IEnumerable的except方法在这里会很好: return db.Projects.Except(GetProjects()); 但我得到一个运行时错误:“除了Cont
IEnumerable
的工作方法
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());
IEnumerable allProjects=db.Projects;
IEnumerable userProjects=GetProjects();
返回除(GetProjects())之外的所有项目;
我知道它本质上与原始语句相同,但现在我没有得到运行时错误。不幸的是,它并没有真正执行except部分,只是返回所有项目,出于某种原因,请尝试以下操作:
var userProjects = GetProjects();
return db.Projects.Except(userProjects.ToArray());
ToArray应该强制对序列进行求值(如果我理解正确的话),并允许操作成功。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;
是的,这就做到了,但是除了()不起作用,这真是太差劲了:(@Bryan Watts,你刚刚用“Linq to Sql不理解如何处理任意内存中的对象序列”这句话显著地改变了我的生活质量感谢you@UB3571:这真是一种恭维。谢谢!我编辑了我的答案,以便快速解释为什么你必须这样做。好得多,但需要一个明确的答案。