c# - Linq 与可空 int 的 sum

标签 c# .net linq

我正在尝试使用 Linq 计算可为 null int 的总和。我的查询如下所示:

int? surveysPromotersFromChatsGroup = (from surveyResult in surveyResultsFromChats
                                            where surveyResult.FirstScoreNPS.HasValue && surveyResult.GroupID == gr && surveyResult.FirstScoreNPS >= 9
                                            select surveyResult.FirstScoreNPS).Sum();

FirstScoreNPs 字段是一个可为 null 的 int。我的问题是无论如何总和总是返回 null。我看不出这背后的逻辑。我检查过,并且确定某些实体在该字段中具有值,并且 sum 方法应该对这些值进行求和。

我尝试过的另一种方法是这样的:

int surveysPromotersFromChatsGroup = (from surveyResult in surveyResultsFromChats
                                      where surveyResult.FirstScoreNPS.HasValue && surveyResult.GroupID == gr && surveyResult.FirstScoreNPS >= 9
                                      select surveyResult.FirstScoreNPS).Sum(score => score.Value);

但是我得到一个异常“linq 空值不能分配给具有类型的成员”。

有没有办法使用 linq 对该字段中的非空值求和?

surveyResultsFromChat 实际上来自另一个查询:

                var surveyResultsFromChats = from surveyResult in db.SurveyResults
                                    join survey in db.Surveys on surveyResult.SurveyID equals survey.SurveyID
                                    join userGroup in db.UserGroupMaps on surveyResult.UserID equals userGroup.UserID
                                    where surveyResult.CreatedDate >= startDate && surveyResult.CreatedDate <= endDate && surveyResult.UserID.HasValue && surveyResult.ChatSessionID.HasValue
                                    select new { surveyResult.ResultID, survey.BrandID, userGroup.GroupID, surveyResult.CompletedDate, surveyResult.FirstScoreNPS };

我的模型中的 FirstScoreNPS 是一个 Nullable int。

最佳答案

你可以试试

(from surveyResult in
 surveyResultsFromChats
where surveyResult.FirstScoreNPS.HasValue && surveyResult.GroupID == gr && 
surveyResult.FirstScoreNPS >= 9
   select surveyResult.FirstScoreNPS).
Select(score => score.Value ?? 0).Sum();

关于c# - Linq 与可空 int 的 sum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12623555/

相关文章:

c# - 公开包含方法

c# - 使用 "using"语法时出现流关闭错误

c# - C# 中的结构与类 - 请解释行为

c# - 如何使用 LinQ 从数据集中选择多列到字符串列表中

c# - 局部变量从未使用 foreach 循环警告

c# - 如何安全地结束 NetworkStream.Read()? (在 C# 或 VB.net 中)

c# winform 屏幕分辨率

c# - LINQ GroupBy 然后 OrderBy 上一个查询的属性

.net - 安全、可移植的加密配置值——可能吗?

c# - 不理解 LINQ 查询