4

グループ化してから、グループ内のアイテムを注文したいと思います。

ラムダでどうやってやるの?

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

上記は私にこれを与えます。

キー-Apple

- - グラニースミス

----ガラ

キー-イチゴ

- - 美味しい

しかし、ご覧のとおり、ガラの価格はグラニースミスよりも安いです...私は何が間違っているのですか?助けてください!

4

3 に答える 3

11

注文する前にグループ化します。つまり、グループ内のアイテムではなく、グループを注文しています。

まずは注文してみる。

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

これはうまくいくはずです。

于 2010-12-23T07:12:43.420 に答える
3

やってみました

var grouped = data.OrderBy(x => x.Price).GroupBy(record => record.Type);
于 2010-12-23T07:15:12.373 に答える
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))

// グルーピングは最小価格でも並べられるようになりました

于 2010-12-23T07:14:56.297 に答える