2

私は次のデータを持っています:

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

数値はNULLにすることができます

結果として次の数値を取得するためにLINQステートメントを記述しています。

  • 係数110の100は110です
  • 係数90の200は180です

必要な結果:290

私のLINQステートメントは現在次のようになっています。

(from b in data
where b.Number.HasValue
select new
{
    Number = b.Number.Value,
    b.Factor
}).Sum(o => o.Number * (o.Factor / 100));

次のエラーが発生します。

マテリアライズされた値がnullであるため、値型'Decimal'へのキャストが失敗しました。結果型のジェネリックパラメーターまたはクエリは、null許容型を使用する必要があります。

4

1 に答える 1

5

これは、Sumの内容を次のようにキャストすることで修正できます。

(from b in data
where b.Number.HasValue
select new
{
    Number = b.Number.Value,
    b.Factor
}).Sum(o => (decimal?)(o.Number * ((decimal)o.Factor / 100))) ?? 0;

(注:質問を書いているときに答えを見つけたので、答えを作成して他の人が見つけられるように公開したほうがいいと思いました)

于 2012-08-27T13:11:53.543 に答える