Если кто-то хочет знать, как я это сделал, я не использовал оператор null coalesce ... Это было еще проще. Возможно, я не объяснил себя сам, но мне нужно было сказать, что если значение равно нулю, значит, я хочу включить этот результат. Проверьте это.
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);
Теперь имейте в виду - у меня было несколько ограничений в том, что я не проектировал бизнес-логику (очевидно) или базу данных - у кого-то еще мог бы быть лучший способ сделать это, если бы у вас был полный контроль над всем, это кажется работать хотя.