2010-05-05 76 views
2

我是LINQ的新手,我想檢查TEXT列是否爲空或空(如String.IsNullOrEmpty)。如何使用LINQ To Entities檢查SQL Server 2005 TEXT列是否爲空或空?

from c in ... 
... 
select new 
     { 
      c.Id, 
      HasBio = !String.IsNullOrEmpty(c.bio) 
     } 

試圖用上面的查詢產生SQLEXCEPTION:

Argument data type text is invalid for argument 1 of len function. 

的SQL生成是類似於以下:

CASE WHEN (NOT (([Extent2].[bio] IS NULL) OR ((CAST(LEN([Extent2].[bio]) AS int)) = 0))) THEN cast(1 as bit) WHEN (([Extent2].[bio] IS NULL) OR ((CAST(LEN([Extent2].[bio]) AS int)) = 0)) THEN cast(0 as bit) END AS [C1] 

LEN並不適用於文本列。我知道DATALENGTH應該用於他們...

我該如何強制LINQ生產這樣的東西?或者任何其他解決方法來測試文本列是否爲空或空?

謝謝!

更新

我想出了這個

HasBio = c.bio.Substring(0, 1).Length > 0 

,但它是一個有點難看不過,任何其他的選擇嗎?

+0

爲什麼使用TEXT數據類型與SQL Server 2005,而不是VARCHAR(MAX)? – LukLed 2010-05-05 22:47:31

+0

因爲我繼承了這個應用程序,並且它在八年前使用SQLServer2000進行了8。如果它很容易做到,我可能會考慮將TEXT列轉換爲VARCHAR(MAX)。 – emzero 2010-05-06 02:22:47

+0

這很容易做到,上週我只做了一次轉換。如果它確實是一個文本字段,那麼沒有理由不這樣做。 – egrunin 2010-05-06 17:31:33

回答

0
powerCircuitList.Where(t => t.textProperty!= null && t.textProperty!= "") 
+0

你能否介紹一下代碼的解釋? – 2011-11-19 09:35:49