如何按 linq 中的导航 属性 成员分组到 sql?

How can I group by a navigation property member in linq to sql?

我有三个 table 持有 Users Groups 和他们的协会,UserGroupsthis fiddle 中所述:

我正在尝试使用 linq2sql 获取用户组中的最大级别,如 fiddle 中的查询所示。

但是,EntityFramework 混淆了联接 table、TblUserGroup,而只是给我导航属性:TblGroups.UsersUser.TblGroups

这是我到目前为止整理的内容,但 Linqpad 告诉我它无法执行:

var maxGroup = from ua in ctx.TblGroups
               group ua by ua.TblUsers.Select(s=>s.UserId)
               into g
               select new
               {
                   UserId= g.Key,
                   MaxLevel = g.Max(s => s.GroupLevel)
               };

看来你可以这样做:

var result = users.Select(u => new 
                               {
                                   UserId = u.Id, 
                                   MaxLevel = u.Groups.Max(g => g.GroupLevel) 
                               });

拥有:

class User
{
    public int UserId { get; set; }

    public string UserName { get;set; }

    public List<Group> Groups { get; set; }
}

class Group
{
    public int GroupId { get; set; }

    public string GroupName { get; set; }

    public int GroupLevel { get; set; }

    public List<User> Users { get; set; }
}

对你有用吗?

var maxGroup = ctx.TblUsers
    .Where(u => u.TblUserGroups != null)
    .Select(u => new 
            {
                UserId = u.UserId, 
                MaxGroupLevel = u.TblUserGroups.TblGroups.Max(g => g.GroupLevel) 
            }
    );