【问题标题】:Linq query containing null value包含空值的 Linq 查询
【发布时间】:2013-10-29 00:26:04
【问题描述】:
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 值,则恢复原始值。

由于我无法为每条记录更改PreviousAttempts,我该如何实现?

【问题讨论】:

    标签: c# linq


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

                 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
                                 };
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-17
        • 1970-01-01
        • 1970-01-01
        • 2014-01-01
        • 1970-01-01
        相关资源
        最近更新 更多