2011-11-08 215 views
20

我的DBML公開了一個具有可爲空的nvarchar字段的記錄集。這個可以爲空的nvarchar字段在我的C#代碼中表示爲一個字符串。LINQ to SQL查詢中的String.IsNullOrEmpty?

有時候這個字段是空的,有時它是一個空字符串,有時它實際上有一個值。

String.IsNullOrEmpty()在LINQ To SQL中工作嗎?例如,將以下工作:

var results = from result in context.Records 
       where String.IsNullOrEmpty(result.Info) == false 
       select result; 
+1

你可以試試,LinqPad是你的朋友。 (http://www.linqpad.net/) –

+1

重複的http://stackoverflow.com/questions/1368946/linq-syntax-where-string-value-is-not-null-or-empty – hatchet

回答

36

奇怪的是,每MSDN String.IsNullOrEmpty支持(由於它不是不支持的),但我只能找到它not being supported投訴。

但是,如果它不工作,你應該沒有明確地把它比作一個布爾值,而不是:

var results = from result in context.Records 
      /*XXX broke :(where !String.IsNullOrEmpty(result.Info) */ 
      where !(result.Info == null || result.Info.Equals("")) 
      select result; 
+1

那沒有' t爲我工作。 Profiler只顯示檢查空字符串,但不顯示'null'值。 –

17

我不知道是否可行,但我敢肯定,這確實:

where (result.Info ?? "") != "" 

(強烈推薦括號,查詢生成器可能會不知所措,沒有他們)

+2

我喜歡這個,但我想''String.IsNullOrEmpty'不支持沒有文檔的情況下[null coalesce操作符支持沒有文檔](http://msdn.microsoft.com/en-us/library /bb882653.aspx)! Oy公司。 – user7116

2

這不是因爲試圖使用它會導致NotSupportedException與被拋出支持此消息:

方法'布爾IsNullOrEmpty(System.String)'不支持 轉換爲SQL。

相反,你可以用這個方法做同樣的事情:

var results = from result in context.Records 
       where result.Info != null && result.Info.Length > 0 
       select result; 

您也可以使用result.Info != String.Empty而不是檢查長度。這兩種方法都行得通。