c# - 如果在 lambda C# 中为 null,则为默认值
问题描述
我正在尝试使用 lambda 表达式加入三个表。如果两个表必须相互匹配,但如果有记录与其他表不对应,则下面的代码将起作用,它会返回错误。Object reference not set to an instance of an object.
using (WeeklyCreditEntities WCE = new WeeklyCreditEntities())
{
var xx = Raw.GroupJoin(WCE.tblCHRIS,
a => a.CHRISID,
b => b.CHRISID,
(a, b) => new
{
raw = a,
chris = b.DefaultIfEmpty().FirstOrDefault()
}).Select(x => new
{
RawEMpid = x.raw.EmployeeID,
CHRISEmpID = x.chris.EmployeeID,
RawCHRISID = x.raw.CHRISID,
RawFullname = x.raw.Fullname,
RawAmount = x.raw.Amount,
chrisBank = x.chris.BankAccount
}).ToList();
解决方案
您可以将安全导航运算符与 null-coalescing 运算符一起使用:
using (WeeklyCreditEntities WCE = new WeeklyCreditEntities())
{
var xx = Raw.GroupJoin(WCE.tblCHRIS,
a => a.CHRISID,
b => b.CHRISID,
(a, b) => new
{
raw = a,
chris = b.DefaultIfEmpty().FirstOrDefault()
}).Select(x => new
{
RawEMpid = x.raw?.EmployeeID ?? defaultValue,
CHRISEmpID = x.chris?.EmployeeID ?? defaultValue,
RawCHRISID = x.raw?.CHRISID ?? defaultValue,
RawFullname = x.raw?.Fullname ?? defaultValue,
RawAmount = x.raw?.Amount ?? defaultValue,
chrisBank = x.chris?.BankAccount ?? defaultValue
}).ToList();
或者,如果您使用的是旧版本的 C#/Visual Studio,则可以只使用三元运算符:
using (WeeklyCreditEntities WCE = new WeeklyCreditEntities())
{
var xx = Raw.GroupJoin(WCE.tblCHRIS,
a => a.CHRISID,
b => b.CHRISID,
(a, b) => new
{
raw = a,
chris = b.DefaultIfEmpty().FirstOrDefault()
}).Select(x => new
{
RawEMpid = x.raw != null? x.raw.EmployeeID : defaultValue,
CHRISEmpID = x.chris != null? x.chris.EmployeeID : defaultValue,
RawCHRISID = x.raw != null? x.raw.CHRISID : defaultValue,
RawFullname = x.raw != null? x.raw.Fullname : defaultValue,
RawAmount = x.raw != null? x.raw.Amount : defaultValue,
chrisBank = x.chris != null?x.chris.BankAccount : defaultValue
}).ToList();
推荐阅读
- sql - 如何匹配 SQL 中的数据(覆盖率)
- progress-4gl - 进度 Openedge 语法将数组数据从 url 读回临时表
- php - PHP命名空间初始化后返回全局命名空间
- c# - 如何在 C# 中动态获取函数形式参数的列表?
- python - 使用lambda中的python将数组值插入到mongdb中的单独文档中?
- wordpress - 对 ?per_page= 的请求在 WordPress 中无法正常工作
- android - Android:不断轮询多个 TCP 服务器
- python - 如何调试两种语言的程序?
- lte - 是否可以通过 Quectel LTE 4G 或 NB-IoT 模块安装操作系统?
- javascript - 用数字对对象数组进行排序