2016-03-07 50 views
2

我一直在努力尋找,因爲一部分幾個小時了一個解決方案,我覺得我的大腦正在幫助。我有以下的LINQ查詢。如何獲得相同的功能ISNULL在LINQ查詢

DropDownListItem item = (
        from c in context.Practitioners 
        where c.PractitionerID == id 
        select new DropDownListItem 
        { 
         Id = c.PractitionerID, 
         DisplayValue = c.FirstName + " " + c.MiddleName + " " + c.LastName, 
         IsActive = c.IsActive, 
         DisplayOrder = c.PractitionerID, 
         CreatedById = new Guid("COFFEEOO-LOVE-LIFE-LOVE-C0FFEEC0FFEE"), 
         CreatedDate = c.CreatedDate, 
        }).FirstOrDefault() ?? new DropDownListItem(); 

       response.Data = item; 

當c.MiddleName可能爲空時,會有instaces。我如何在這個查詢中處理它,以便如果c.MiddleName爲空,我可以給它分配一個空白的「」字符串? 這是我已經嘗試過,但沒有解決的。 - 創建擴展來檢查IsNullOrEmpty。我發現這在LINQ查詢中不起作用。 - 試圖做類似c.MiddleName.ToString(),它並沒有爲LINQ查詢工作,要麼轉換c.Middle字符串。 請給我更多的方向,我應該走向。謝謝!

回答

0

您可以檢查空值和空字符串,而不是使用任何方法是LINQ到實體不理解(Trim將被轉換爲SQL):

DisplayValue = c.FirstName + " " + ((c.MiddleName == null || c.MiddleName.Trim() == string.Empty) ? string.Empty : (c.MiddleName + " ")) + c.LastName, 
+0

這給了我一個異常說「無法轉換類型'System.Boolean爲鍵入‘System.Object的’。LINQ到實體僅支持鑄造EDM原始或枚舉類型。」 –

+0

謝謝@sarvana。編輯完成後它完美無缺! –

+0

這個工程太:DisplayValue =(c.FirstName ??的String.Empty)+ 「」 +(c.MiddleName ??的String.Empty)+ 「」 +(c.LastName ??的String.Empty) – Coding4Fun

2

我假設你通過c.MiddleName是什麼意思空是c.MiddleName爲空(因爲如果它是一個空字符串,你的問題沒有意義:p)。

如果情況確實如此嘗試寫c.MiddleName ?? ""

這意味着,如果??左側部分爲null,則使用表達式的右側部分

更多的文檔

,看看https://msdn.microsoft.com/en-us/library/ms173224.aspx你就必須改變這種方式代碼:

DropDownListItem item = (
        from c in context.Practitioners 
        where c.PractitionerID == id 
        select new DropDownListItem 
        { 
         Id = c.PractitionerID, 
         DisplayValue = (c.FirstName ?? "") + " " + (c.MiddleName ?? "") + " " + (c.LastName ?? ""), 
         IsActive = c.IsActive, 
         DisplayOrder = c.PractitionerID, 
         CreatedById = new Guid("COFFEEOO-LOVE-LIFE-LOVE-C0FFEEC0FFEE"), 
         CreatedDate = c.CreatedDate, 
        }).FirstOrDefault() ?? new DropDownListItem(); 

       response.Data = item; 

爲了不認爲??運算符具有C#中最低優先級之一。 在C#這裏https://msdn.microsoft.com/en-us/library/6a71f45d.aspx

+0

我用你的建議。現在它只是返回姓氏。我正在看的這個人有姓和名,沒有中間名。所以我期望顯示值是名和姓。 –

+0

對不起,我打算說現在只返回名字。沒有姓,即使這個人有姓氏 –

+1

它應該是'(c.FirstName ??「」「)+」「+(c.MiddleName ??」「)+」「+(c.LastName ??」「 )'。現在它和'c.FirstName? (「」+「」+ c.MiddleName ??(「」+「」+ c.LastName ??「」))' – juharr

0

檢查經營者優先試試這個

DisplayValue = (c.FirstName?? string.Empty) + " " + (c.MiddleName ?? string.Empty) + " " + (c.LastName?? string.Empty) 
+0

這只是返回名字,即使此記錄具有姓氏。如果記錄已經列出,我會期望名字和姓氏。 –

+0

我編輯了我的答案,現在工作正常 – Coding4Fun

1

我有點困惑你的問題。你正在創建一個字符串,所以即使c.MiddleName爲空,它也應該被解釋爲一個空字符串。

你也可以試試這個:

 DisplayValue = (c.MiddleName != null) ? 
c.FirstName + " " + c.MiddleName + " " + c.LastName : 
c.FirstName + " " + c.LastName, 

但幾乎所有其他的答案都非常相似。

作爲一個說明,你缺少括號後面select new DropDownListItem,所以這可能是問題。

+0

查詢似乎是EF。這意味着它被轉換爲SQL,其中連接一個'null'字符串值的行爲將不同於它在C#中的行爲。當使用對象初始值設定項時,你也不需要括號'()'。 – juharr