我有一个List<>用户对象(用户名(字符串)和成绩(字符串))
List<User> users = new List<User>();
使用DB(或文本文件)中的值填充List,我有一个包含5个对象的List:
user1 A
user1 B
user2 A
user2 G
user3 D
我想修改List(或创建一个新List),因此结果应该是一个带有htis值的新List:
user1 A,B
user2 A,G
user3 D
我尝试过GroupBy:
var result = jquery.GroupBy(u => u.username).OrderByDescending(g => g.Count()).Select(g => g.Key);
但我希望将结果放在新的列表中
答案 0 :(得分:2)
试试这个
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) });
答案 1 :(得分:1)
试试这个: -
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。
答案 2 :(得分:1)
您可以构建一个新类型,它将保存您想要的信息,例如
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();
注意强> 您可以避免新类型的定义。在这种情况下,您的列表将包含一系列匿名类型的obejcts。