Linq查询在多对多关系中得到不相交的集合
本文关键字:集合 查询 关系 Linq | 更新日期: 2023-09-27 18:01:55
在我的应用程序中,我管理分配给用户的Person,关联类型是多对多的,因为一个Person可以分配给多个User。所以我有以下表格:
用户表:
标识
人表:
PersonID
(联合表由实体框架管理,在Linq查询中不可见)
PersonApplicationUser表:
标识
PersonID
我想检索没有分配给任何用户的人员集合。到目前为止,我可以通过这种方式获得未分配给当前登录用户的person集合
var query = db.Persons.Except(user.Persons);
不幸的是,它也会检索分配给其他用户的Persons,这是不正确的,我认为Except是要走的路,但需要建议。
编辑:我发现的主要困难是我不能从代码访问联合表PersonApplicationUser。
你要找的是这个:
db.Persons.Where(p => !p.Users.Any())
试试这个:
db.Persons.Where(p => p.Users.Count() == 0);
Entity Framework知道关系就像集合,所以你可以执行集合操作,EF会将它们转换成相关的sql。
你想要的是这样的:
var query = from p in db.Persons
where !p.Users.Any()
select p;
或者在方法语法中:
var query = db.Persons.Where(p => !p.Users.Any());