如何将linq中的导航属性成员分组为sql?

时间:2015-07-17 06:31:05

标签: c# linq-to-sql entity-framework-6

我有三个表格,Users Groups及其关联UserGroups,如this小提琴所示:

我试图获得用户中的最高级别'使用linq2sql在小提琴中的查询中显示的组。

但是,EntityFramework会对联接表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)
               };

2 个答案:

答案 0 :(得分:1)

似乎你可以这样做:

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; }
}

答案 1 :(得分:0)

它对你有用吗?

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