2011-04-06 135 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); 

現在記住 - 我曾在我沒有設計業務邏輯(顯然)或數據庫中的一些限制 - 其他人可能有更好的方法來做到這一點,如果你有完全控制一切,這似乎工作,但。

相關問題