Кто-нибудь знает, как воспроизвести функцию NVL () в linq


Поэтому мне нужно сделать запрос, где мне нужна куча NVL, но мне нужно сделать это в linq (если это поможет бэкенд db-это BD2, и мы используем дозвуковой) я искал в интернете "nvl linq" и не нашел ничего полезного, поэтому я спрашиваю здесь,

Спасибо за помощь...

2 4

2 ответа:

Можно использовать нулевой коалесцирующий оператор ??:

var abs = from row in table
          select new {a = row.a ?? "default", b = row.b};
Оператор смотрит на значение слева, и если оно равно null, то он использует значение справа. Так в примере, если row.a равно null, то a становится "default". Это предполагает, что row.a является строкой.

Если кто-то хочет знать, как я это сделал, я не использовал оператор null coalesce... Все оказалось еще проще. Может быть, я не объяснил себя ясно, но мне нужно было сказать, что если значение равно null, то это означает, что я хочу включить этот результат. Проверить его.

 possibleVendors = (from vndMapping in db.COMPANIES_VND_MAPPINGS
                     join v in db.COMPANIES_CMP_COMPANIES on vndMapping.VENDOR_ID equals v.COMPANY_ID
                     where
                     !(from ex in db.COMPANIES_VND_MAPPINGS
                        where (ex.OEM_ID == oemId || ex.OEM_ID == null)
                        && (ex.MODEL_ID == modelId || ex.MODEL_ID == null)
                        && (ex.MODALITY_ID == modalityId || ex.MODALITY_ID == null)
                        && (ex.CLASS_ID == productTypeId || ex.CLASS_ID == null)
                        && ex.EXCLUDE.ToUpper().Equals("Y")
                        select ex.VENDOR_ID).Contains(vndMapping.VENDOR_ID)
                     && (vndMapping.OEM_ID == oemId || vndMapping.OEM_ID == null)
                     && (vndMapping.MODEL_ID == modelId || vndMapping.MODEL_ID == null)
                     && (vndMapping.MODALITY_ID == modalityId || vndMapping.MODALITY_ID == null)
                     && (vndMapping.CLASS_ID == productTypeId || vndMapping.CLASS_ID == null)
                     select new
                     {
                       vndMapping.VENDOR_ID,
                       v.COMPANY_NAME
                     }).Distinct().OrderBy(x => x.VENDOR_ID).ToDictionary(x => x.VENDOR_ID, x => x.COMPANY_NAME);

Теперь имейте в виду - у меня было несколько ограничений в том, что я не разрабатывал бизнес-логику (очевидно) или базу данных - у кого-то другого мог бы быть лучший способ сделать это, если бы у вас был полный контроль из всего, кажется, это работает, хотя.