有谁知道如何在linq中重现NVL()函数

时间:2011-04-06 14:05:35

标签: linq nvl

所以我需要进行查询,我需要一堆NVL,但我需要在linq中执行这些操作(如果它有助于db后端是BD2并且我们使用亚音速)我在网上搜索“NVL linq”和没有找到任何有用的东西,所以我在这里问,

感谢您的帮助......

2 个答案:

答案 0 :(得分:8)

您可以使用空合并运算符??

var abs = from row in table
          select new {a = row.a ?? "default", b = row.b};

操作符查看左侧的值,如果为null,则使用右侧的值。因此,在示例中,如果row.a为空,则a变为"default"

这假定row.a是一个字符串。

答案 1 :(得分:0)

如果有人想知道我最终如何做到这一点,我没有使用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);

现在请记住 - 我有一些限制,因为我没有设计业务逻辑(显然)或数据库 - 如果你完全控制了一切,其他人可能有更好的方法来做到这一点,这似乎虽然工作。