Кто-нибудь знает, как воспроизвести функцию NVL () в linq
Поэтому мне нужно сделать запрос, где мне нужна куча NVL, но мне нужно сделать это в linq (если это поможет бэкенд db-это BD2, и мы используем дозвуковой) я искал в интернете "nvl linq" и не нашел ничего полезного, поэтому я спрашиваю здесь,
Спасибо за помощь...
2 ответа:
Можно использовать нулевой коалесцирующий оператор
??
:Оператор смотрит на значение слева, и если оно равно null, то он использует значение справа. Так в примере, еслиvar abs = from row in table select new {a = row.a ?? "default", b = row.b};
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);
Теперь имейте в виду - у меня было несколько ограничений в том, что я не разрабатывал бизнес-логику (очевидно) или базу данных - у кого-то другого мог бы быть лучший способ сделать это, если бы у вас был полный контроль из всего, кажется, это работает, хотя.