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?

C# GroupBy 将值传递给键,但不将其包含在 GroupBy 逻辑中

一个组只能有一个键。如果每个组中的元素具有不同的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);
}