2012-02-17 12 views
1

私はこのエラーに関する多数の報告書を見直しましたが、私が見た解決策は私の状況では適用されない、またはうまくいかない(または私はそれらを機能させる方法を理解していませんか?私は躊躇なく答えを見つけるためにこれを投稿しています。LINQ to Entities:合計子の値

var symbolCover = DataModel.NCoverAnalysisDetail.Where(d => d.IsNew && 
      d.NCoverAnalysis.BuildTime > FromNewDate).Sum(c => c.SymbolCoverage); 

と、それは次の例外がスローされます:私はL2Eで、次の簡単なクエリを送信してい

マテリアライズド値がnullであるため、値タイプ「のInt32」へのキャストが失敗した

。結果タイプの汎用パラメーターまたは照会のいずれかがNULL可能タイプを使用する必要があります。

テーブルにはNULL可能な列はなく、データベースに送信されるSQL(下を参照)は0(ゼロ)を返します。そのため、問題の内容はわかりません。

exec sp_executesql N'SELECT 
[GroupBy1].[A1] AS [C1] 
FROM (SELECT 
SUM([Extent1].[SymbolCoverage]) AS [A1] 
FROM [dbo].[NCoverAnalysisDetail] AS [Extent1] 
INNER JOIN [dbo].[NCoverAnalysis] AS [Extent2] ON [Extent1].[NCoverAnalysisID] = [Extent2].[ID] 
WHERE ([Extent1].[IsNew] = 1) AND ([Extent2].[BuildTime] > @p__linq__0) 
) AS [GroupBy1]',N'@p__linq__0 datetime',@p__linq__0='2012-02-17 00:00:00' 
+0

http://stackoverflow.com/questions/2076827/linq-error-generic-parameter-or-the-query-must-use-a-nullable-typeの複製のように見えます。 intを使ってみてください。 symbolCoverの代わりにvarの代わりに? – AlanT

答えて

3
var symbolCover = DataModel.NCoverAnalysisDetail 
      .Where(d => d.IsNew && d.NCoverAnalysis.BuildTime > FromNewDate) 
      .Sum(c => (int?)c.SymbolCoverage).GetValueOrDefault(0); 
+0

これはエラーを停止しますが、なぜですか?基になるフィールドがNULL可能でなく、SQLがゼロを返すときに_null_はどこに入りますか? – Peter

+0

フィルタのため合計する行がない可能性があります –

+1

OK、これを確認します - ありがとう! – Peter