0

LINQ to SQL を使用して、WCF サービスから返された結果セットの行を合計しようとしています。基本的な選択、並べ替え、フィルタリングなどに LINQ を使用できます。

しかし、Group By / Sum を実行しようとすると、以下のクエリから Take(5) を実行しようとすると、「値を Null にすることはできません」というエラー メッセージが表示されます。(resultsは null ではなく、1000 個以上のアイテムがqueryありますが、返そうとすると null になります:)

編集:以下の回答に記載されているように、無効なキャストを削除しました。代わりに、集計結果を選択して、オーダーメイドのカスタム クラスにします。これで、ページはエラーなしで実行されますが、group by / sum は機能しません.... グループごとに合計するのではなく、結果の上位 5 つの値を取得するだけです。なんで?

var query = (from h in results
            group h by h.Order into hh                     
            select new TopOrders()
            {
                Order = hh.Key,
                Total= hh.Sum(r => r.Price)
            }).OrderByDescending(i => i.Total);

return query.Take(5).ToList();

私が指摘できる唯一のしわは、Order 自体がコレクション (OrderID、OrderName など) であるため、hh.Key.Order.OrderID などで明示的にグループ化しようとしましたが、効果がありませんでした。

あなたが見ることができるものから私が欠けているものはありますか?ありがとう。

4

1 に答える 1

3

おそらくr.Price数件の注文が無効なので、 を使用しますSum(r => r.Price ?? 0)。しかし、それはあなたのデータを知らずにちょっとした推測です。

編集 見落としていることは明らかです。匿名型の IEnumerable を にキャストしようとしていますがList<TopOrders>、これは不可能です。ただし、キャストが有効でない場合、asオペレーターは生成します。nullだからqueryそれ自体はnull!キャストを削除するかTopOrder、匿名型の代わりに を作成してください。

于 2012-10-21T15:50:19.227 に答える