我有一个list: User{name, groupname}
,我有一个函数AddGroupMemberstip
,它包含一个用户列表和一个组名。我需要根据用户名分割用户,然后将其提供给此功能。
e.g。我理想地想做
var groups = users.<SOME LINQ FUNCTION>(u => u.groupname);
foreach(var group in groups)
{
AddGroupMembership(users.value, users.key);
}
其中users.value
为IEnumerable<User>
,users.key
将是他们共享的组名(对于该子组)。
请有人建议。
答案 0 :(得分:2)
您正在寻找GroupBy
:
foreach (var g in users.GroupBy(u => u.groupname))
{
AddGroupMembership(g, g.Key);
}
每个组g
本身都是IEnumerable<User>
,因此在将第一个参数传递给.value
时,没有AddGroupMembership
属性访问权。
答案 1 :(得分:0)
你可能会这样做:
var grouped = from user in users
group user by user.groupname into groupedUsers
select new {
users = groupedUsers,
groupName = groupedUsers.FirstOrDefault().groupName
};
这将为您提供一组用户,然后您可以迭代这些用户:
foreach (var group in grouped) {
AddGroupMembership(group.users, group.groupName);
}
它比Jons的答案更冗长,而且我不是100%确定我的语法是正确的,但这是基本的想法。