2

Linqを使用してnull許容整数の合計を計算しようとしています。私のクエリは次のようになります。

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

FirstScoreNPsフィールドはnull許容整数です。私の問題は、何があっても合計が常に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);

しかし、「linqnull値をタイプのメンバーに割り当てることはできません」という例外が発生します。

linqを使用して、そのフィールドのnull以外の値を合計する方法はありませんか?

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はNullableintです。

4

1 に答える 1

5

あなたは試すことができます

(from surveyResult in
 surveyResultsFromChats
where surveyResult.FirstScoreNPS.HasValue && surveyResult.GroupID == gr && 
surveyResult.FirstScoreNPS >= 9
   select surveyResult.FirstScoreNPS).
Select(score => score.Value ?? 0).Sum();
于 2012-09-27T14:24:52.143 に答える