2017-06-18 7 views
0

以下のスローランタイムエラーが発生しました。それがうまくコンパイルが:ToList()を使用せずにLINQ Sum()関数が失敗する

float? totalSum = (from t in _context.Orders 
       join c in _context.Customers.Where(c => c.region=="NW") 
       on t.CustomerId equals c.CustomerId 
     select t.price).Sum(); 

エラー

Unable to cast object of type 'System.Double' to type 'System.Nullable`1[System.Single]'. 

しかし、次の作品(唯一の違いは、私が.Sum()を適用する前にToList()を使用しているということです - しかしdefinition of Sum()によると、それはせずに動作するはずですToList()を使用しています - 正確?

float? totalSum = (from t in _context.Orders 
       join c in _context.Customers.Where(c => c.region=="NW") 
       on t.CustomerId equals c.CustomerId 
     select t.price).ToList().Sum(); 

UPDATE

price属性のデータ型は、SQL Server 2012

+0

すべての変数とプロパティの実際のタイプは何ですか?エンティティはどのようにマップされていますか?このエラーは、 'price'が' float? 'ではないか、またはあなたのマッピングが乱れていることを示唆しています。 –

+0

@JeffMercadoあなたのコメントを読んだ後、私は 'price'が本当に 'float? 'であることを二度チェックしました。 – nam

+0

' select t.price ?? 0.0f'である。どうやら何かが翻訳を台無しにしているので、問題のフィールドをすべて横断して修正するかもしれない。しかし、まだそれは_actual_クラスの定義と_actual_マッピングを参照するのに役立ちます...問題を診断するのに十分な情報がまだなく、あなたはまだその情報を提供していません。 –

答えて

0

は、エラーメッセージがあなたが受け取るヌルをもたらす可能性が

選択t.priceにデータ型 realにマップ float?です反映します。ヌルを確認する:

select t.price ?? 0.0F

または.ToList(); nullをチェックする独自のSum()を実装することもできます。

+2

しかし、なぜToList()で動作しますか? – MetaColon

+0

ToList()?デフォルト値が0に設定された新しいオブジェクトをインスタンス化します。IEnumerableは、[]を含むIEnumerableを実装したもので埋められます。 – map

関連する問題