当我在使用文本字段的表上工作时,我遇到了错误。
如果我得到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 :(得分:5)
我认为您最好的选择是将列数据类型更新为VARCHAR(MAX)
(如果是TEXT
)或NVARCHAR(MAX)
(如果是NTEXT
。有很多关于如何执行此操作的资源,但通常您会创建一个[N]VARCHAR(MAX)
的新列,然后将所有数据更新到新列中,然后删除旧列,最后将新列重命名为旧名。
如果您无法更改表架构,则需要创建view
并在选择该视图时执行类型转换..但是您可能刚刚更改了列数据如上所述键入类型(除非您不是数据库所有者,并且您在另一个数据库中创建视图)。但请注意,EF并不总是像对待桌子那样对视角有好处。