LINQ to Entities: суммирование дочерних значений - PullRequest
1 голос
/ 17 февраля 2012

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

Я отправляю следующий простой запрос в 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'

1 Ответ

3 голосов
/ 17 февраля 2012
var symbolCover = DataModel.NCoverAnalysisDetail
           .Where(d => d.IsNew && d.NCoverAnalysis.BuildTime > FromNewDate)
           .Sum(c => (int?)c.SymbolCoverage).GetValueOrDefault(0);
...