C# C Linq查询分组依据多个表之间的多对多表
我在C中有以下实体。我想通过teamname获得用户组。我尝试了以下查询,但join中不包括WorkUser。include语句在以下查询中不起作用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
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();