0

我在使用文本字段的表格上工作時遇到錯誤。實體框架 - 獲取文本列中的數據長度

如果我得到一個VARCHAR列的長度,我可以做

var result = (from t in context.tablename select t.fullname.Length)

但是,如果我運行一個文本字段相同的查詢:

var result = (from t in context.tablename select t.biography.Length)

我得到錯誤:

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

在這個問題上做了一點點reading up我明白爲什麼SQL Server引發這個錯誤,但我不確定最好的解決方法。我知道我可以返回結果,然後得到結果字符串的長度,但肯定有一個更簡單的方法來做到這一點?

+0

雖然不是你的問題的答案,你有沒有考慮改變列數據類型爲'varchar(MAX)'? – Seph 2012-04-25 12:52:05

+1

@Yuck,不,它們不完全相同(一方面,[TEXT已被棄用](http://msdn.microsoft.com/en-us/library/ms143729%28v=SQL.90% 29.aspx),特別是他們與len函數不一樣@ Seph的建議是好的 – 2012-04-25 13:04:39

+0

我應該標記這個;如果這有什麼區別,我在SQL 2008上 – GrandMasterFlush 2012-04-25 13:07:03

回答

5

我認爲您最好的選擇是將列數據類型更新爲VARCHAR(MAX)如果它是TEXTNVARCHAR(MAX)如果它是NTEXT。有很多關於如何做到這一點的資源,但通常你會創建一個新列[N]VARCHAR(MAX),然後將所有數據更新到新列中,然後刪除舊列,最後將新列重命名爲舊名稱。

如果你不能改變表格模式,那麼你將需要創建一個view並在選擇該視圖時進行類型轉換..但是你可能剛剛改變了列數據類型上面(除非你不是數據庫的所有者,並在不同的數據庫中創建視圖)。但請注意,EF並不總是像表格一樣和觀點一樣好。

+0

感謝Seph。我沒有意識到文本已經被折舊了(我從SQL 2000到SQL 2008)。使用ALTER語句轉換列是很簡單的,現在代碼完美地工作,如果有人想知道,這篇文章給出了概述兩種列類型之間的區別:http: //stackoverflow.com/a/834863/543538 – GrandMasterFlush 2012-04-25 13:44:38