Значение по умолчанию, если ноль в лямбда-выражении C # - PullRequest
0 голосов
/ 01 декабря 2018

Я пытаюсь объединить три таблицы, используя лямбда-выражения.Приведенный ниже код работает, если обе таблицы должны соответствовать друг другу, но если есть записи, не соответствующие другой таблице, возвращается ошибка. 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();

1 Ответ

0 голосов
/ 01 декабря 2018

Вы можете использовать оператор безопасной навигации с оператором объединения нулей:

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...