5

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

谢谢你的帮助...

4

2 回答 2

9

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

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

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

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

于 2011-04-06T14:40:19.917 回答
0

如果有人想知道我最终是如何做到这一点的,我没有使用空合并运算符......它甚至比这更简单。也许我没有清楚地解释我自己,但我需要做的是说如果值为 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);

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

于 2011-04-08T12:58:40.753 回答