Linq Lambda GroupBy和OrderBy

时间:2010-12-23 07:05:00

标签: linq igrouping

我想分组,然后在组内订购商品。

我如何使用lamda,

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();
        }
    }
}

上面给了我这个..

Key - Apple

----格兰尼史密斯

----加拉

Key - 草莓

----美味

但正如你可以看到Gala的价格低于格兰尼史密斯......我做错了什么?请帮助!

3 个答案:

答案 0 :(得分:9)

在订购之前,您正在进行分组。换句话说,您正在订购组而不是组中的项目。

先尝试订购。

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

这应该有用。

答案 1 :(得分:3)

你试过吗

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

答案 2 :(得分:0)

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))

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