2

Linqを使用してエンティティに順序付けられたレコードを取得しようとしていますDateTimeが、個別のレコードとしても必要です。

私のテーブルデザインは次のようになります。

ここに画像の説明を入力してください

blogItemNodeIdUmbraco CMSノード(コメントを作成できるブログアイテムノード)はどこにありますか

要件は、ブログアイテムのリストを、コメントの数で並べ替えることができることです。blogItemNodeIdしたがって、これらのブログアイテムを表示するには、最新のコメントを区別する必要があります。

私の現在のlinqクエリは次のようになります。

var distinctComments = (from c in ctx.BlogComments
                        orderby c.date
                        group c by c.blogItemNodeId
                        into uniqueRecords
                        select uniqueRecords.FirstOrDefault());

このクエリの問題は、同じであるすべてのコメントの中で最も新しいレコードを見つける必要がある場所で、最初の(したがってFirstOrDefault())レコードが明確に見つかることです。blogItemNodeIdblogItemNodeId

誰かがこれを達成する方法を知っていますか?:-)

よろしくお願いします。

編集

私はこれを行うことでそれを機能させることができました:

var allComments = (from c in ctx.BlogComments
                   orderby c.date descending
                   select c).ToList();

var distinctComments = allComments.GroupBy(x => x.blogItemNodeId).Select(y => y.FirstOrDefault());

しかし、私はグループを行う前にすべてのコメントを取得する必要がありますが、それはあまりエレガントでもパフォーマンスでもありません。

どんな助けでも大歓迎です!

4

1 に答える 1

2

次のように、orderBy ステートメントと GroupBy ステートメントの両方を 1 つのステートメントに組み合わせることができます。

var distinctComments = ctx.BlogComments.OrderBy(c => c.date)
                        .GroupBy(x => x.blogItemNodeId)
                        .Select(y => y.FirstOrDefault());

パフォーマンスが悪い場合は、Singleton を介して HttpCache に DataContext をキャッシュできます。例については、このブログ投稿を参照してください。これは Umbraco DataContext に基づいていますが、別のタイプのコンテキストで使用するために簡単に変更できます。

于 2013-01-08T21:14:18.463 に答える