实体框架 - 获取文本列中的数据长度

时间:2012-04-25 12:50:35

标签: sql-server sql-server-2008 entity-framework entity-framework-4

当我在使用文本字段的表上工作时,我遇到了错误。

如果我得到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会引发这个错误,但我不确定它的最佳方法。我知道我可以返回结果,然后获得结果字符串的长度,但肯定有更简单的方法吗?

1 个答案:

答案 0 :(得分:5)

我认为您最好的选择是将列数据类型更新为VARCHAR(MAX)(如果是TEXT)或NVARCHAR(MAX)(如果是NTEXT。有很多关于如何执行此操作的资源,但通常您会创建一个[N]VARCHAR(MAX)的新列,然后将所有数据更新到新列中,然后删除旧列,最后将新列重命名为旧名。

如果您无法更改表架构,则需要创建view并在选择该视图时执行类型转换..但是您可能刚刚更改了列数据如上所述键入类型(除非您不是数据库所有者,并且您在另一个数据库中创建视图)。但请注意,EF并不总是像对待桌子那样对视角有好处。