所以我需要在需要一堆 NVL 的地方进行查询,但我需要在 linq 中执行这些操作(如果它有助于 db 后端是 BD2 并且我们使用的是亚音速)我在网上搜索了“NVL linq”并没有真的找到任何有用的东西所以我在这里问,
谢谢你的帮助...
您可以使用空合并运算符??
:
var abs = from row in table
select new {a = row.a ?? "default", b = row.b};
运算符查看左侧的值,如果为 null,则使用右侧的值。因此,在示例中,如果row.a
为 null,则a
变为"default"
。
这假设它row.a
是一个字符串。
如果有人想知道我最终是如何做到这一点的,我没有使用空合并运算符......它甚至比这更简单。也许我没有清楚地解释我自己,但我需要做的是说如果值为 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);
现在请记住 - 我有一些限制,因为我没有设计业务逻辑(显然)或数据库 - 如果你完全控制一切,其他人可能有更好的方法来做到这一点,但这似乎可行.