0

我有一个list: User{name, groupname},我有一个函数AddGroupMemberstip,它需要一个用户列表和一个组名。我需要根据用户的组名拆分用户,然后将其输入此函数。

例如,我理想地想做

var groups = users.<SOME LINQ FUNCTION>(u => u.groupname);

foreach(var group in groups)
{
   AddGroupMembership(users.value, users.key);
}

whereusers.value将是 aIEnumerable<User>并且users.key将是他们都共享的组名(对于该子组)。

请有人可以提出一些建议。

4

2 回答 2

2

您正在寻找GroupBy

foreach (var g in users.GroupBy(u => u.groupname))
{
    AddGroupMembership(g, g.Key);
}

每个组g本身就是一个IEnumerable<User>,因此在将第一个参数传递给 时没有.value属性访问AddGroupMembership

于 2012-07-11T10:01:13.303 回答
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% 确定我的语法是正确的,但这是相同的基本思想。

于 2012-07-11T10:03:19.487 回答