2012-02-17 60 views
1

我已经审查了这个错误的许多报告,但我所看到的解决方案要么不适用,要么不适用于我的情况(或者我不理解如何使它们工作?)所以我很不情愿地发布这个希望找到答案。LINQ to Entities:总结孩子价值

我在提交L2E以下简单查询:

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

,并抛出以下异常:

演员阵容价值型“的Int32”失败,因为物化值为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 2012-02-17 09:35:01

回答

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

谢谢这样做可以阻止错误 - 但为什么?当底层字段不可空并且SQL返回零时,_null_在哪里? – Peter 2012-02-17 09:48:51

+0

有可能没有行的总和,因为过滤器 – 2012-02-17 09:54:06

+1

好吧,将检查 - 谢谢! – Peter 2012-02-17 11:33:04