EntityFramework中的多对多SQL查询

Ben*_*Ben 2 c# sql entity-framework

我需要一些关于sql查询的帮助,我正在使用EntityFramework作为ORM.

我有一个User-- Group Many to Many关系,即一个用户可以属于多个组,一个组可以有多个用户.

我完成映射的方式是..

USER tbl,Usr_Grp表和组表,其中PK =主键,FK =外键

USER表中有- >用户ID(PK),用户名
组表中有- >的GroupId(PK),组名
Usr_Grp表中有- > ID(PK),UUserId(FK到用户表),GGroupId(FK到grouptable将)

我面临的问题是......在我的api中,我将得到一组GroupId,我想找到属于所有这些GroupId的用户(即所有传入的组).

有没有办法在实体框架或Sql中编写此查询.我真的很感激我能得到的任何帮助.

-RN

The*_*est 6

连接表Usr_Grp不应该有Id.如果您在(UUserId,GGroupId)上创建复杂的主键,那么EF会自动理解它是多对多关系.

如果您建立如下关系:替代文字

然后EF将生成具有多对多关系的实体:替代文字

完成所有设置后,您可以轻松使用此类代码:

var ids = new List<int>{1, 2, 3, 4}; // GroupIds you need
context.Groups
        .Where(x=> ids.Contains(x.Id))
        .SelectMany(x=>x.Users)
        .Distinct()
        .ToArray();
Run Code Online (Sandbox Code Playgroud)

如果你不能改变模型,那么只需使用这样的linq查询:

context.Grp_Usrs
        .Where(x=> ids.Contains(x.GroupId))
        .SelectMany(x=>x.Users)
        .Distinct()
        .ToArray();
Run Code Online (Sandbox Code Playgroud)