今天在用EF访问SQLServer 中的一个数据类型是Text 字段的类型查询。想要查询参数中包含Text字段的内容,如下查询方式。
Expression<Func<, bool>> conditions;
if (!string.IsNullOrWhiteSpace(text参数))
conditions = x => text参数.Contains(x.Text字段);
else conditions = null;
结果在Count()时报错:
执行命令定义时出错。有关详细信息,请参阅内部异常。
归根究底原因就是 EF 生成的 SQL语句中会有如下 :WHERE ( CAST(CHARINDEX([Extent1].[Text字段], @p__linq__0) AS int)) > 0 导致
{"参数数据类型 text 对于 charindex 函数的参数 1 无效。"} 的错误。Text类型的字段不能作为charindex函数的参数。
其实不只是这个一个函数,还有好多函数的参数都不能用Text字段的吧。
以后使用的时候一定要注意了。
解决方法一:把Text类型的字段改为varchar 或者nvarchar吧。
解决方法二:
最后其实我是把查询条件弄反了。最后修改查询条件:x=>x.Text字段.Contains(text参数)。