如何按 linq 中的导航 属性 成员分组到 sql?
How can I group by a navigation property member in linq to sql?
我有三个 table 持有 Users
Groups
和他们的协会,UserGroups
如 this fiddle 中所述:
我正在尝试使用 linq2sql 获取用户组中的最大级别,如 fiddle 中的查询所示。
但是,EntityFramework 混淆了联接 table、TblUserGroup
,而只是给我导航属性:TblGroups.Users
或 User.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)
}
);
我有三个 table 持有 Users
Groups
和他们的协会,UserGroups
如 this fiddle 中所述:
我正在尝试使用 linq2sql 获取用户组中的最大级别,如 fiddle 中的查询所示。
但是,EntityFramework 混淆了联接 table、TblUserGroup
,而只是给我导航属性:TblGroups.Users
或 User.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)
}
);