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

C#GroupBy将值传递给键,但不将其包含在GroupBy逻辑中,c#,lambda,C#,Lambda,我想对一个值进行分组,并传递另一个值,以便在键中使用(如果有) class foo { public locationID { get; set; } public roleID { get; set; } } 我做了一些返回foo列表的事情 fooList.GroupBy(g => new { LocationID = g.locationID }).ToList(); 上面将按GroupBy并将LocationID放入新列表的键中 fooList.GroupBy(g

我想对一个值进行分组,并传递另一个值,以便在键中使用(如果有)

class foo {
    public locationID { get; set; }
    public roleID { get; set; }
}
我做了一些返回foo列表的事情

fooList.GroupBy(g => new { LocationID = g.locationID }).ToList();
上面将按GroupBy并将LocationID放入新列表的键中

fooList.GroupBy(g => new { LocationID = g.locationID, RoleID = g.roleID }).ToList();
上面的工作原理是将RoleId放入键中,但是GroupBy使用LocationID&RoleId来完成GroupBy的逻辑部分


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

您不能修改
并添加其他数据,您可以将
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);
}

一个组只能有一个键。如果每个组中的元素具有不同的
roleID
值,则需要多个
roleID
才能保留在键中。如果每个组中的元素都具有相同的
roleID
值,那么按该值分组也不会产生任何效果,而且是无害的。

你说得对,我越想,我的问题就越没有意义。如果它们是一对一的关系,那么分组就起作用了。否则,使用结果中的值会起作用。谢谢