使用Linq将对象列表分组到对象列表的新分组列表中

使用Linq将对象列表分组到对象列表的新分组列表中

我不知道Linq是否可能这样做但是这里......

我有一个对象:

public class User{
  public int UserID { get; set; }
  public string UserName { get; set; }
  public int GroupID { get; set; }}

我返回一个可能如下所示的列表:

List<User> userList = new List<User>();userList.Add( new User { UserID = 1, UserName = "UserOne", GroupID = 1 } );userList.Add( new User { UserID = 2, UserName = "UserTwo", GroupID = 1 } );userList.Add( new User { UserID = 3, UserName = "UserThree", GroupID = 2 } );userList.Add( new User { UserID = 4, UserName = "UserFour", GroupID = 1 } );userList.Add( new User { UserID = 5, UserName = "UserFive", GroupID = 3 } );userList.Add( new User { UserID = 6, UserName = "UserSix", GroupID = 3 } );

我希望能够在上面的列表上运行Linq查询,该查询按GroupID对所有用户进行分组。因此输出将是包含用户的用户列表列表(如果这有意义?)。就像是:

GroupedUserList
    UserList
        UserID = 1, UserName = "UserOne", GroupID = 1
        UserID = 2, UserName = "UserTwo", GroupID = 1
        UserID = 4, UserName = "UserFour", GroupID = 1
    UserList
        UserID = 3, UserName = "UserThree", GroupID = 2
    UserList
        UserID = 5, UserName = "UserFive", GroupID = 3
        UserID = 6, UserName = "UserSix", GroupID = 3

我尝试过使用groupby linq子句,但这似乎返回了一个键列表,并且没有正确分组:

var groupedCustomerList = userList.GroupBy( u => u.GroupID ).ToList();


慕桂英546537
浏览 465回答 3
3回答

蓝山帝景

var&nbsp;groupedCustomerList&nbsp;=&nbsp;userList&nbsp;&nbsp;&nbsp;&nbsp;.GroupBy(u&nbsp;=>&nbsp;u.GroupID) &nbsp;&nbsp;&nbsp;&nbsp;.Select(grp&nbsp;=>&nbsp;grp.ToList()) &nbsp;&nbsp;&nbsp;&nbsp;.ToList();

呼如林

您的组声明将按组ID分组。例如,如果你然后写:foreach&nbsp;(var&nbsp;group&nbsp;in&nbsp;groupedCustomerList){ &nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("Group&nbsp;{0}",&nbsp;group.Key); &nbsp;&nbsp;&nbsp;&nbsp;foreach&nbsp;(var&nbsp;user&nbsp;in&nbsp;group) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("&nbsp;&nbsp;{0}",&nbsp;user.UserName); &nbsp;&nbsp;&nbsp;&nbsp;}}应该工作正常。每个组都有一个键,但也包含IGrouping<TKey, TElement>一个集合,允许您迭代组的成员。正如李提到的那样,如果你真的想要,你可以将每个组转换成一个列表,但是如果你只是按照上面的代码迭代它们,那么这样做没有任何实际好处。
打开App,查看更多内容
随时随地看视频慕课网APP