9

long 型のいくつかの項目の合計を取得するにはどうすればよいですか...ここに mycode があります:

using (gEn myEntities = new gEn)
{
var load = (from items in myEntities.Orders
select items.PayO).DefaultIfEmpty(0).Sum();
}

しかし、Sumは私にintを与えます...また、DefaultIfEmptyメソッドを長い型に使用するときにSumメソッドと競合するかどうかを知りたいです...事前に感謝します...

4

2 に答える 2

14

Sum戻り値で使用される式の型をselect返します (定義されたオーバーロードの 1 つである場合)。long を返したい場合は、次のようにキャストしitems.PasOます。

var load = (from items in myEntities.Orders
            select (long)(items.PayO)
           )
           .DefaultIfEmpty(0).Sum();

また、DefaultIfEmpty メソッドを long 型に使用する場合に Sum メソッドと競合するかどうかも知りたいです。

いいえ、を含むすべてのタイプでDefaultIfEmpty動作します。その型のオーバーロードがある限り、問題なく動作します。longSum

于 2013-11-07T23:04:21.717 に答える
3

Sum()を返す場合、intそれはコレクションのデータ型であるためです。これらの LINQ to Object メソッドはすべてジェネリックです。いいえ、DefaultIfEmpty副作用はありません。コレクションにアイテムがない場合は 0 をSum返すだけでIEnumberable<int>、値が 0 になる単一のアイテムで結果が処理されます。

ここでEFを使用していると仮定しています。その場合は、データを取得した後にキャストを行うか、C# 側でモデルを変更してlong. データ ソースから C# モデルを生成し、それが int32 を使用している場合、それはおそらくテーブルにもあるため、そのテーブルのデータ型を確認することもできます。

于 2013-11-07T23:05:12.283 に答える