2

.NET LINQ で、グループごとに最新の項目を返そうとしています。

PARTITIONSql でパーティションを作成し、パーティションごとに最新 (パーティションごと) に並べて上位 1 つを取得することを思い出します。

これまでのところ、linqコードの開始を取得しました..

from p in products
group p by new {p.Provider.ProductId, p.Provider.Name} into g

しかし、パーティション/グループごとorder by p.CreatedOn descに を追加してを取得する方法がわかりません。.Take(1)

4

1 に答える 1

5

次のようなもの(クエリの最後に追加):

select new {
    g.Key,
    Product = g.OrderByDescending(x => x.CreatedOn).First()
}

仕事をするべきです。またはおそらくもっと便利です:

select new {
    g.Key.ProductId,
    g.Key.Name,
    Product = g.OrderByDescending(x => x.CreatedOn).First()
}

または、キーを明示的に必要としない場合 (アイテムの下で使用できるため)、次のようにします。

select g.OrderByDescending(x => x.CreatedOn).First()

基本的に、それぞれgIGrouping<T>(一部の anonymous の場合T) です。これは、それぞれがあなたのグループであるプロパティをg 持ち、それぞれ元の要素 (おそらく)のシーケンスであることを意味します。.Keyg IEnumerable<>Product

于 2013-07-15T08:55:39.370 に答える