Linq将列表拆分为子列表然后迭代

时间:2012-07-11 09:56:20

标签: linq

我有一个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.valueIEnumerable<User>users.key将是他们共享的组名(对于该子组)。

请有人建议。

2 个答案:

答案 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%确定我的语法是正确的,但这是基本的想法。