如何按内部列表对项目进行分组

连体

我想User按他们的清单分组Group
一个用户可以在多个组中。

public class User
{
    public string Username { get; set; }
    public List<Group> Groups { get; set; }
}

BusinessLogic向我返回List<User>
我需要重新定义此列表,以使“组”包含“用户”,而不是“用户”具有其组。

示例:
组1
-用户1-
用户2
组2
-用户1-
用户3
组3
-用户2-
用户3

我被困在需要使用哪种扩展方法上,所以我不确定要搜索什么。
我会假设该GroupBy方法,但此后我迷路了:)

吉拉德·格林(Gilad Green)

采用SelectMany扁平化嵌套集合是检索的用户元组和它的群体。这样,包含多个组的使用将导致多个记录。下一组按该组记录,并将用户保留为该组中的项目

var result = userList.SelectMany(user => user.Groups.Select(group => (user,group)))
                     .GroupBy(item => item.group, item => item.User);

在当前的实现中,当group by在Group对象上执行时,该对象应实现EqualsGetHashCode如果您不想这样做,则存在一个重载,该重载还会收到一个IEqualityComparer有关更多详细信息,请参见文档

注意命名元组的使用。如果您使用的是7.0之前的C#版本,则可以投影一个匿名对象,也可以显式初始化一个元组,然后更改访问属性-Item1和的方式Item2

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章