我想根据其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
方法,但此后我迷路了:)
答案 0 :(得分:3)
使用SelectMany
展平嵌套的集合是检索用户及其组的元组。这样,包含多个组的使用将导致多个记录。下一组按该组记录,并将用户保留为该组中的项目
var result = userList.SelectMany(user => user.Groups.Select(group => (user,group)))
.GroupBy(item => item.group, item => item.User);
在当前实现中,当对Group
对象执行group by时,该对象应实现Equals
和GetHashCode
。如果您不想这样做,则存在一个过载,该过载还会收到一个IEqualityComparer
。有关更多详细信息,请参见documentation。
注意使用命名元组。如果您使用的是7.0之前的C#,则可以投影一个匿名对象,或显式初始化一个元组,然后更改访问属性的方式-Item1
和Item2
。 >