【发布时间】:2017-03-22 12:19:40
【问题描述】:
我正在使用实体框架,我编写此代码以从 DB 中获取一些结果:
ReviewsDBEntities DB = new ReviewsDBEntities();
var result=DB.Review.Where(r => r.ReviewText.Length > 200);
但我将此错误视为内部错误:“参数数据类型 ntext 对 len 函数的参数 1 无效”
我查了一下,发现因为ReviewText的类型定义为ntext,所以函数Len不会在Database端运行。现在,我不知道如何更改代码以获取长度超过 200 的 ReviewTexts。
【问题讨论】:
-
您的错误指向正确的方向。我猜您的基础类型是“文本”,不应再使用。如果您可以将该类型更新为 varchar(max) 或 nvarchar(max)。实体在确定此旧类型的长度时存在问题。你可以做一个我相信去'.ToString().Length'并尝试的黑客,但这仍然不能解决根本问题是类型。
-
我刚写了 '.ToString().Length' 还是不行。
-
这太糟糕了,我建议尽可能更改此数据类型,即使您确实从下面的 Jeroen 或其他人那里得到了正确的答案。使用这种类型不是最佳做法,它也会在以后以其他方式限制您。
-
@djangojazz 我记得那天我将类型更改为 ntext,因为我找不到任何其他类型来存储大文本。有什么推荐的吗?
-
varchar(max) 或 nvarchar(max) 由于您在实体中遇到问题的相同原因。众所周知,MS 将来也将弃用 ntext 的类型,因此摆脱它是个好主意:msdn.microsoft.com/en-us/library/ms187993.aspx
标签: c# entity-framework linq ntext