Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C Linq查询分组依据多个表之间的多对多表_C#_Linq To Entities - Fatal编程技术网

C# C Linq查询分组依据多个表之间的多对多表

C# C Linq查询分组依据多个表之间的多对多表,c#,linq-to-entities,C#,Linq To Entities,我在C中有以下实体。我想通过teamname获得用户组。我尝试了以下查询,但join中不包括WorkUser。include语句在以下查询中不起作用 var query = from gu in DbContext.WorkTeamUsers select gu; var query1 = query.Include(x => x.WorkUser); var result = await (from te

我在C中有以下实体。我想通过teamname获得用户组。我尝试了以下查询,但join中不包括WorkUser。include语句在以下查询中不起作用

        var query = from gu in DbContext.WorkTeamUsers
                    select gu;

        var query1 = query.Include(x => x.WorkUser);

    var result = await (from team in DbContext.WorkTeams
                        join tgu in query1 on team.WorkTeamId equals tgu.WorkTeamId
                        join u in DbContext.WorkUsers on tgu.UserId equals u.UserId
                        group tgu by tgu.WorkTeam.Name into grp
                        select new
                        {
                            Name = grp.Key,
                            Value = grp.ToList()
                        }).ToListAsync();


public class WorkTeam
{
    [Key]
    public int WorkTeamId { get; set; }

    public ICollection<WorkTeamUser> WorkTeamUsers { get; } 
                                                    = new List<WorkTeamUser>();     
}

public class WorkUser
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int WorkUserId { get; set; }

    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int UserId { get; set; }

    public string UserName { get; set; }

    public ICollection<WorkTeamUser> WorkTeamUsers { get; } = new List<WorkTeamUser>();
}

public class WorkTeamUser
{
    [Key]
    public int Id { get; set; }

    public int WorkTeamId { get; set; }

    public int UserId { get; set; }

    public WorkTeam WorkTeam { get; set; }

    public WorkUser WorkUser { get; set; }
}   
样本数据如下所示:

    Table WorkTeamUser:
    =====================
Id  UserId  WorkTeamId
--  ------  ----------
1   2       1
2   11      1
6   10      3
7   15      1
8   16      3

Table WorkUser:
================
UserId  UserName
2       John
11      Bob
10      Daniel
15      Simon
16      Fred


Expected result:

public class Result {
    public string TeamName {get;set;}
    public List<WorkUser> Users {get;set;}
}
谁能帮我写下正确的linq查询,这样我就能得到预期的结果


谢谢

无需分组或加入。您仍然缺少团队名称。请尝试以下操作:

            List<Result> results = DbContext.WorkTeams.Select(x => new Result() {
                TeamName = x.Name,
                 Users = x.WorkTeamUsers.Select(y => y.WorkUser).ToList()
            }).ToList();

我认为不需要加入。你需要提供更多的信息。第一个结果有错误。任何类中都没有字符串TeamName。第二,没有类用户。那么您没有WorkTeamGroupUser类。您可以这样开始:List result=DbContext.WorkTeams.Selectx=>new result{嗨,我已经更新了我的查询。谢谢,但这会在数据库上生成3个查询。一个是先选择团队,然后为每个团队单独查询以获得USR列表。为什么需要3个查询?数据不能从类中提取出来吗?看起来你做得很艰难。不,我的意思是,当我执行时,你的代码在数据库中创建了3个查询你的代码行并签入sql profiler。那么3个查询有什么问题吗?否则你必须在c中使用连接。这是一个更好的权衡。哦,好的。我不知道这个权衡。谢谢
            List<Result> results = DbContext.WorkTeams.Select(x => new Result() {
                TeamName = x.Name,
                 Users = x.WorkTeamUsers.Select(y => y.WorkUser).ToList()
            }).ToList();