首页 > 解决方案 > 如果在 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();

标签: c#lambda

解决方案


您可以将安全导航运算符与 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();

推荐阅读