Linq查询包含空值

sha*_*nky 3 c# linq

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(),
              };
Run Code Online (Sandbox Code Playgroud)

上面是我的linq查询,在PreviousAttempts字段中我得到null值,如果不满足where.因此,如果它包含null,我想要更改此0,而不是包含null,如果它不包含非null值,则恢复原始值.

我怎么能实现这一点,因为我无法改变PreviousAttempts每个记录?

Jam*_*mes 9

您可以在此处使用null-coalescing运算符,例如

PreviousAttempts = SubIdAtt.Where(c => c.SUBID == entity.SUBJECT_ID)
                           .Select(c => c.ATT)
                           .FirstOrDefault() ?? 0;
Run Code Online (Sandbox Code Playgroud)

或者,如果要保留所有LINQified,请使用DefaultIfEmpty方法,例如

PreviousAttempts = SubIdAtt.Where(c => c.SUBID == entity.SUBJECT_ID)
                           .Select(c => c.ATT)
                           .DefaultIfEmpty(0)
                           .FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)


Sam*_*Sam 6

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

           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
                           };
Run Code Online (Sandbox Code Playgroud)