【问题标题】:Linq Lambda GroupBy and OrderByLinq Lambda GroupBy 和 OrderBy
【发布时间】:2011-05-29 19:55:00
【问题描述】:

我想分组,然后对组内的项目进行排序。

我该如何使用 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();
        }
    }
}

上面给了我这个..

钥匙 - 苹果

----史密斯奶奶

----晚会

钥匙 - 草莓

----好吃

但是你可以看到 Gala 的价格比 Granny smith 低……我做错了什么?请帮忙!

【问题讨论】:

    标签: linq igrouping


    【解决方案1】:

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

    尝试先订购。

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

    这应该可行。

    【讨论】:

      【解决方案2】:
      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))
      

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

      【讨论】:

      • 不,您是根据该组中的最低价格订购组。您不在组内订购。
      【解决方案3】:

      你试过了吗

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-28
        • 1970-01-01
        • 1970-01-01
        • 2022-07-01
        • 1970-01-01
        相关资源
        最近更新 更多