2012-02-17 4 views
1

Я просмотрел многочисленные сообщения об этой ошибке, но решения, которые я видел, либо не применяются, либо не работают в моей ситуации (или я не понимаю, как заставить их работать?) поэтому я неохотно размещаю это в надежде найти ответ.LINQ to Entities: суммирование дочернего значения

Я представляю следующий простой запрос в L2E:

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

и выдает следующее исключение:

Актерских к типу значения «Int32» не удался, так как материализованное значение равно нулю , Либо общий параметр типа результата, либо запрос должны использовать тип с нулевым значением.

В таблицах нет нулевых столбцов, и 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? вместо var для symbolCover? – AlanT

ответ

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

спасибо, что это останавливает ошибку - но почему? Где находится _null_, когда базовое поле не равно NULL, а SQL возвращает ноль? – Peter

+0

Не может быть никаких строк для сумм, из-за фильтра –

+1

ОК, проверит это - спасибо! – Peter