从现有列表创建一个新列表并对对象进行分组

本文关键字:列表 对象 一个 创建 新列表 | 更新日期: 2023-09-27 18:28:29

我有一个列表<>带有用户对象(用户名(字符串)和等级(字符串))

List<User> users = new List<User>();

列表中填充了来自DB(或文本文件)的值,我有一个包含5个对象的列表:

user1 A
user1 B
user2 A
user2 G
user3 D

我想修改列表(或创建一个新列表),这样结果应该是一个具有htis值的新列表:

user1 A,B
user2 A,G
user3 D

我试过GroupBy:

var result = jquery.GroupBy(u => u.username).OrderByDescending(g => g.Count()).Select(g => g.Key);

但我想在一个新的列表中得到结果

从现有列表创建一个新列表并对对象进行分组

试试这个

var result = users
            .GroupBy(x => x.Name)
            .OrderByDescending(g => g.Count())
            .Select(g => new { Name = g.Key, Grades = string.Join(",", g.Select(x => x.Grade) });

这是的代码示例

试试这个:-

var query = users.GroupBy(x => x.UserName).OrderByDescending(x => x.Count())
                                        .Select(x => new { UserName = x.Key, Grades = String.Join(",", x.Select(z => z.Grade)) });

工作Fiddle。

您可以构建一个新的类型,它将保存您想要的信息,如

public class UserGrade
{
    // the user's name.
    public string UserName { get; set;}
    // a comma separated list of the grades achieved by the user.
    public string Grades { get; set; }
}

然后,我们根据用户名的结果进行搜索,并为每组选择一个bew UserGrade对象。最后我们调用ToList,按照顺序我们得到的结果是一个列表:

var result = jquery.GroupBy(u => u.username)
                   .Select(x=> new UserGrade{
                       UserName = x.Key,
                       Grades = String.Join(",",x.Select(y=>y.Grade)
                 }).ToList();

注意您可以避免定义新类型。在这种情况下,您的列表将包含一系列匿名类型的obejct。