Linq Lambda GroupBy and OrderBy

5
我希望能按组分组,然后在组内对项目进行排序。
请问如何使用lambda实现呢?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var data = new[]
                  {
                      new { Name="Tasty", Type="Strawberries", isAvail=true, Price=1.90m, Quantity=20 },

                    new { Name="Granny Smith", Type="Apple", isAvail=false, Price=0.80m, Quantity=7 },
                    new { Name="Gala", Type="Apple", isAvail=true, Price=0.75m, Quantity=10 }

                  };

            var grouped = data.GroupBy(record => record.Type).OrderBy(x => x.Min(y => (Decimal)y.Price));

            foreach (var group in grouped)
            {
                Console.WriteLine("Key {0}", group.Key);

                foreach (var item in group)
                {
                    Console.WriteLine("\t{0}", item.Name);
                }
            }
            Console.ReadLine();
        }
    }
}

以上给出了以下结果...

关键词 - 苹果

----青苹果

----晚香玉

关键词 - 草莓

----美味

但是你可以看到,晚香玉的价格比青苹果低...我做错了什么?请帮忙!

3个回答

11

在分组之前您正在进行排序。换句话说,您正在对分组进行排序,而不是对分组内的项目进行排序。

请先尝试排序。

var grouped = data.OrderBy(x => x.Price).GroupBy(record => record.Type); 

这应该可以工作。


3
你尝试过了吗?
var grouped = data.OrderBy(x => x.Price).GroupBy(record => record.Type);

1
var grouped = data.GroupBy(record => record.Type)
.Select(g=>new {g.Key,records=g.OrderBy(r=>r.Price)})  

// 在这一点上,记录按价格排序(在分组内部)

.OrderBy(x => x.records.Min(y => (Decimal)y.Price))

// 现在分组也按照最低价格排序


不,你是根据每个组中的最低价格来排序组。你不会在组内排序。 - Kirk Broadhurst

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接