C# GroupBy 将值传递给键,但不将其包含在 GroupBy 逻辑中
本文关键字:GroupBy 包含 值传 | 更新日期: 2023-09-27 18:30:45
我想对值执行一个 GroupBy 一个并将另一个值传递给 Key 以在键中使用,如果我有
class foo {
public locationID { get; set; }
public roleID { get; set; }
}
我做了一些返回foo列表的事情。
fooList.GroupBy(g => new { LocationID = g.locationID }).ToList();
上面将分组依据并将位置 ID 放入新列表的键中。
fooList.GroupBy(g => new { LocationID = g.locationID, RoleID = g.roleID }).ToList();
上面的工作原理是将 RoleId 放入密钥中,但随后 GroupBy 使用 LocationID 和 RoleID 来执行 Group By 的逻辑部分。
如果我只想按位置 ID 分组,但将其他数据(角色 ID )放入密钥中,该怎么办? 而且我不想在 GroupBy 逻辑中包含 RoleId?
一个组只能有一个键。如果每个组中的元素具有不同的roleID
值,则需要多个roleID
才能在键中保存。如果每个组中的元素都具有相同的roleID
值,则按该值分组也没有任何作用,并且是无害的。
您不能修改key
并添加其他数据,您可以将GroupBy
结果投影到匿名类型,您可以在其中从组的第一个元素追加roleID
,例如:
var query = fooList.GroupBy(r => r.locationID)
.Select(grp => new
{
Key = grp.Key + grp.First().roleID
});
或者你可以做:
var query = fooList.GroupBy(r => r.locationID)
.Select(grp => new
{
Key = grp.Key,
RoleId = grp.First().roleID,
});
稍后您可以使用:
foreach (var item in query)
{
Console.WriteLine("Key: {0}, RoleID: {1}", item.Key, item.RoleId);
}