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

相关问题