包含空值的 Linq 查询

本文关键字:查询 Linq 空值 包含 | 更新日期: 2023-09-27 18:37:05

var records = from entity in q1.question_papers
              select new
              {
                  QuestionPaperID = entity.QUESTION_PAPER_ID,
                  SubjectID = entity.SUBJECT_ID,       
                  PreviousAttempts = SubIdAtt.Where(c => c.SUBID == entity.SUBJECT_ID)
                                             .Select(c => c.ATT)   
                                             .FirstOrDefault(),
              };

上面是我的 linq 查询,如果不符合 where PreviousAttempts,我会得到 null 值。因此,如果它包含 null,我想更改这个 0,而不是包含 null,如果它不包含非 null 值,则恢复原始值。

由于我无法更改每个记录的PreviousAttempts,我如何实现这一点?

包含空值的 Linq 查询

您可以在此处使用空合并运算符,例如

PreviousAttempts = SubIdAtt.Where(c => c.SUBID == entity.SUBJECT_ID)
                           .Select(c => c.ATT)
                           .FirstOrDefault() ?? 0;

或者,如果你想保持它全部 LINQized 使用 DefaultIfEmpty 方法,例如

PreviousAttempts = SubIdAtt.Where(c => c.SUBID == entity.SUBJECT_ID)
                           .Select(c => c.ATT)
                           .DefaultIfEmpty(0)
                           .FirstOrDefault();

您可以使用合并运算符。 ??

           var records = from entity in q1.question_papers
                           select new
                           {
                               QuestionPaperID = entity.QUESTION_PAPER_ID,
                               SubjectID = entity.SUBJECT_ID,
                               PreviousAttempts = SubIdAtt.Where(c => c.SUBID == entity.SUBJECT_ID).Select(c => c.ATT).FirstOrDefault() ?? 0
                           };