C#GroupBy将值传递给Key但不包括在GroupBy逻辑中

时间:2014-11-18 17:38:08

标签: c# lambda

我想在值上做一个GroupBy并传递另一个值来在Key中使用,如果我有

class foo {
    public locationID { get; set; }
    public roleID { get; set; }
}

我做的事情会返回一个foo列表。

fooList.GroupBy(g => new { LocationID = g.locationID }).ToList();

上面是GroupBy并将LocationID放入新列表的Key中。

fooList.GroupBy(g => new { LocationID = g.locationID, RoleID = g.roleID }).ToList();

以上工作只要将RoleId放入Key中,然后GroupBy使用LocationID& RoleID用于执行Group By的逻辑部分。

如果我只想按LocationId进行分组,但是将其他数据,RoleID放入密钥怎么办?而且我不想在GroupBy逻辑中包含RoleId?

2 个答案:

答案 0 :(得分:1)

您无法修改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);
}

答案 1 :(得分:1)

一个组只能有一个密钥。如果每个组中的元素具有不同的roleID值,则需要在密钥中保留多个roleID。如果每个组中的元素都具有相同的roleID值,则按此分组也不会做任何事情并且无害。