按字母顺序和数量在同一列表中排序

时间:2014-09-08 17:48:34

标签: c# sorting

我需要按字母顺序(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));
        }
    }
}

此样本仅按字母顺序排序。

预期结果

  1. 姓名=&#34; BItem&#34;,年龄= 10
  2. 姓名=&#34; BItem&#34;,年龄= 10
  3. 姓名=&#34; BItem&#34;,年龄= 10
  4. 姓名=&#34; BItem&#34;,年龄= 10
  5. 姓名=&#34; BItem&#34;,年龄= 10
  6. 姓名=&#34; AItem&#34;,年龄= 10
  7. 姓名=&#34; AItem&#34;,年龄= 10
  8. 姓名=&#34; AItem&#34;,年龄= 10
  9. 姓名=&#34; AItem&#34;,年龄= 10
  10. 姓名=&#34; CItem&#34;,年龄= 10
  11. 姓名=&#34; CItem&#34;,年龄= 10
  12. 有什么建议吗?

1 个答案:

答案 0 :(得分:2)

您可以在此处执行的操作是按名称对项目进行分组,按照大小对组进行排序,然后将组的集合展平为这些组中的项目。

var query = items.GroupBy(item => item.Name)
    .OrderByDescending(group => group.Count())
    .SelectMany(group => group);