2

次のコードを使用して、Linq toSQLでラムダを含むsumを使用する場合:

int query = (from f in odc.RDetails
                     where f.ticketID == int.Parse(ticket.ToString())
                     select f).Sum(x => x.Rate);



次のエラーが発生します

。null値ではない値型であるSystem.Int32型のメンバーにnull値を割り当てることはできません。

4

2 に答える 2

2

. (値として受け入れるan) ではなく、 であることを確認する必要x.Rateがあります。intint?intnull

. クエリに要素がない場合、.Sum何もせずに を返しnullます。デフォルト値を選択します0

var query = from f in odc.RDetails
            where f.ticketID == int.Parse(ticket.ToString())
            select f;

int result = query.Any() 
             ? query.Sum(x => x.Rate ?? 0) // use the ?? if x.Rate is an "int?".
             : 0; // default value you can choose.
于 2012-05-22T19:31:53.697 に答える
0

int.Parse(ticket.ToString())独自の行に分割して、デバッグのためにその解析を Linq から分離します。

RDetails.Rateそれが例外をスローしているのか、それとも値の 1 つが nullなのかはわかりません。それは本当にNullable<int>ですか?

の場合RDetails.Rateは、例外を回避Nullable<int>できます。...Sum(x => x.Rate ?? 0)

于 2012-05-22T19:44:06.817 に答える