2011-04-06 131 views
4

所以我需要做一个查询,我需要一堆NVL,但我需要在linq中做这些(如果它帮助db后端是BD2,我们是采用亚音速)我搜索“NVL LINQ”网页,并没有真正找到,所以我在这里问有用的东西,有没有人知道如何在LINQ中重现NVL()函数

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

+0

你能给我们提供一个查询的例子吗? – 2011-04-06 14:38:43

回答

8

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

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

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

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

0

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

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

相关问题