c# - 包含空值的 Linq 查询

标签 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(),
              };

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

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

最佳答案

您可以使用 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();

关于c# - 包含空值的 Linq 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19639651/

相关文章:

c# - 扩展字典的属性不会在序列化中显示

c# - WPF 验证运行时生成的表单

c# - 将参数传递给 ViewModel 中的 linq 查询的正确方法

sql-server - 在 EF4 中使用 NOLOCK 提示?

c# - 检查一个数组是否是另一个数组的子集

c# - 防止复选框被选中(而不是简单地取消选中)

c# - 如何在WPF中使用ISynchronizeInvoke接口(interface)?

sql-server - 使用Count时如何查看EntityFramework生成的sql

c# - 为 DateTime 字段筛选 EntityDataSource

c# - 为什么我的攻击函数会破坏所有对象包括攻击者?