我需要按字母顺序(asc)和数量(desc)在同一列表中进行排序。
我的开始样本:
using System;
using System.Collections.Generic;
namespace ConsoleApplication1
{
class Program
{
public class Item
{
public string Name { get; set; }
public int Age { get; set; }
}
static void Main(string[] args)
{
var items = new List<Item>
{
new Item {Name = "CItem", Age = 10},
new Item {Name = "AItem", Age = 10},
new Item {Name = "BItem", Age = 10},
new Item {Name = "AItem", Age = 10},
new Item {Name = "CItem", Age = 10},
new Item {Name = "AItem", Age = 10},
new Item {Name = "AItem", Age = 10},
new Item {Name = "BItem", Age = 10},
new Item {Name = "BItem", Age = 10},
new Item {Name = "BItem", Age = 10},
new Item {Name = "BItem", Age = 10}
};
items.Sort((x, y) => String.CompareOrdinal(x.Name, y.Name));
}
}
}
此样本仅按字母顺序排序。
预期结果
有什么建议吗?
答案 0 :(得分:2)
您可以在此处执行的操作是按名称对项目进行分组,按照大小对组进行排序,然后将组的集合展平为这些组中的项目。
var query = items.GroupBy(item => item.Name)
.OrderByDescending(group => group.Count())
.SelectMany(group => group);