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。

Linq查询在多对多关系中得到不相交的集合

你要找的是这个:

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());