2013-07-22 46 views
2
爲空字符串

比方說,我需要一個對象與存儲在我的數據庫的表中調用索引的其他對象。 我需要的對象的X屬性,這是一個要比較的字符串,但它可能是null如何取消引用可能在LINQ

我也有在比較之前修剪我comparedObject的X屬性。 我試着做到以下幾點:

List<Guid> Ids = DataContext.Indexes.Where(ci => 
       (comparedObject.X != null && ci.X != null ? 
       ci.X == comparedObject.X.Trim() : 
       (ci.X == null || ci.X == string.Empty) && (comparedObject.X == null || comparedObject.X == string.Empty))).Select(ci => ci.Id).ToList(); 

而且即使comparedObjects.Xnull它仍然拋出了comparedObject.X.Trim()表達一個空引用異常。

我認爲對LINQ轉換情況發生的原因?

有沒有更好的方法來修剪X屬性,而不必分配comparedObject.X空字符串,以防查詢之前它爲空?

編輯: 我想詳細說明 - 這個查詢在這裏簡化了,我也比較了其他6個屬性。我想在1個查詢中保留這一點,而不是單獨分爲僅在X屬性中有所不同的2個查詢。 在查詢之外修剪是我目前的解決方案,我希望有一個聲明的解決方案,如果有任何:)

謝謝!

+0

那你想在你的,如果你要是別的選擇? – Ehsan

+0

嘗試使用string.IsNullOrWhiteSpace() - 通過查看查詢,似乎不應該執行trim()語句。 – Jash

回答

1

即使compareObjects.X爲null,它仍會爲comparisonObject.X.Trim()表達式引發null 引用異常。

你最好做一個空檢查LINQ的語句之前

if(comparedObject !=null && !string.IsNullorEmpty(comparedObject.X)) 
{ 
    // your code goes here 
} 

下面的代碼

(ci.X == null || ci.X == string.Empty) && (comparedObject.X == null || comparedObject.X == string.Empty) 

可以換到

string.IsNullorEmpty(ci.X) && string.IsNullorEmpty(comparedObject.X) 

,我會改變代碼如下

List<Guid> Ids = DataContext.Indexes.Where(ci => 
       (string.IsNullorEmpty(ci.X) && string.IsNullorEmpty(comparedObject.X)) || ci.X == comparedObject.X.Trim()) 
       .Select(ci => ci.Id).ToList(); 
+0

我仍然必須在後面的LINQ語句中比較X屬性(trimmed)。所以我需要在聲明前對它進行修剪,並且我試圖找到比這更優雅的解決方案:) 我還在比較爲簡單起見而刪除的其他屬性(約6)。我想阻止查詢重複,因爲我必須在else子句中的語句中執行沒有X屬性的相同查詢。 –

0

可能是你可以嘗試:

List<Guid> Ids = DataContext.Indexes.Where(ci =>ci.X != null ? ci.X == comparedObject.X==null?"":comparedObject.X.Trim() : 
           (comparedObject.X == null || comparedObject.X == null))) 
          .Select(ci => ci.Id).ToList(); 
+0

這基本上是我在做什麼,但由於它在一個LINQ查詢中,.Trim()仍然被執行,並且空引用被實現:) –