0

ラムダ式を使用して、ネストされたアイテムのリストの平均値に基づいてアイテムのリストを並べ替えることができるかどうか疑問に思っています。

プロジェクト用語では、それぞれが多くのレビューを持つことができる製品のリストを持っています。各製品のレビュー リストの平均評価に基づいて、製品のリストを並べ替えたいと考えています。

私はこれを持っています:

products = category.Products.OrderBy(i => i.Reviews.Average(x => x.Rating));

これは問題なくビルドされますが、実行するとエラーが返されます

シーケンスには要素が含まれていません

ラムダ式でこれを行うことは可能ですか?

4

2 に答える 2

6

Enumerable.AverageInvalidOperationException製品には がないため、シーケンスに要素が含まれていないため、がスローされますReviews

使用できますEnumerable.DefaultIfEmpty(customValue)

products = category.Products
    .OrderBy(i => i.Reviews.Select(r => r.Rating).DefaultIfEmpty(0).Average());

これらの製品を結果から除外したい場合があります。

products = category.Products
    .Where(p => p.Reviews.Any())
    .OrderBy(p => p.Reviews.Average(r => r.Rating));
于 2013-01-16T21:55:48.127 に答える
2

あなたの製品の 1 つには、おそらくレビューがありません。どの評価を付けるかを決める必要があります。最後に表示したいので 99 としましょう。

category.Products.OrderBy(p=>p.Reviews.Count > 0 ?
                          p.Reviews.Average(r=>r.Rating) : 99);
于 2013-01-16T21:54:07.933 に答える