我想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
方法,但此后我迷路了:)
采用SelectMany
扁平化嵌套集合是检索的用户元组和它的群体。这样,包含多个组的使用将导致多个记录。下一组按该组记录,并将用户保留为该组中的项目
var result = userList.SelectMany(user => user.Groups.Select(group => (user,group)))
.GroupBy(item => item.group, item => item.User);
在当前的实现中,当group by在Group
对象上执行时,该对象应实现Equals
和GetHashCode
。如果您不想这样做,则存在一个重载,该重载还会收到一个IEqualityComparer
。有关更多详细信息,请参见文档。
注意命名元组的使用。如果您使用的是7.0之前的C#版本,则可以投影一个匿名对象,也可以显式初始化一个元组,然后更改访问属性-Item1
和的方式Item2
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句