Linq查询以获得多对多关系中的不相交集

时间:2014-05-06 21:05:29

标签: c# linq

在我的应用程序中,我管理分配给用户的人员,关联的类型是多对多,因为可以将一个人分配给多个用户。所以我有以下表格。

用户表:
用户ID

人员表:
PersonID

(由实体框架管理的联盟表,从Linq查询中看不到)
PersonApplicationUser表:
用户名
是PersonID

我想检索未分配给任何用户的一组人员。到目前为止,我可以通过这种方式获得未分配给当前登录用户的人员集

var query = db.Persons.Except(user.Persons);

不幸的是,它会检索分配给其他用户的人员,这是不正确的,我认为除了是要走的路,但需要建议。

编辑: 我发现的主要困难是我无法从代码中访问联合表PersonApplicationUser。

3 个答案:

答案 0 :(得分:0)

您正在寻找:

db.Persons.Where(p => !p.Users.Any())

答案 1 :(得分:0)

试试这个:

db.Persons.Where(p => p.Users.Count() == 0);

答案 2 :(得分:0)

实体框架意识到关系就像集合一样,因此您可以执行集合操作,EF会将它们转换为相关的sql。

你想要的是这样的:

var query =  from p in db.Persons
             where !p.Users.Any()
             select p;

或者在方法语法中:

var query = db.Persons.Where(p => !p.Users.Any());