所以我需要做一个查询,我需要一堆NVL,但我需要在linq中做这些(如果它帮助db后端是BD2,我们是采用亚音速)我搜索“NVL LINQ”网页,并没有真正找到,所以我在这里问有用的东西,有没有人知道如何在LINQ中重现NVL()函数
感谢您的帮助......
所以我需要做一个查询,我需要一堆NVL,但我需要在linq中做这些(如果它帮助db后端是BD2,我们是采用亚音速)我搜索“NVL LINQ”网页,并没有真正找到,所以我在这里问有用的东西,有没有人知道如何在LINQ中重现NVL()函数
感谢您的帮助......
可以使用空合并运算符??
:
var abs = from row in table
select new {a = row.a ?? "default", b = row.b};
运算符查看左边的值,如果它为null,则它使用右侧的值。因此在该示例中,如果row.a
为空,则a
变为"default"
。
这里假定row.a
是一个字符串。
如果有人想知道我是如何做到这一点的,我没有使用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);
现在记住 - 我曾在我没有设计业务逻辑(显然)或数据库中的一些限制 - 其他人可能有更好的方法来做到这一点,如果你有完全控制一切,这似乎工作,但。
你能给我们提供一个查询的例子吗? – 2011-04-06 14:38:43