【问题标题】:"Argument data type ntext is invalid for argument 1 of len function" error“参数数据类型 ntext 对 len 函数的参数 1 无效”错误
【发布时间】: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


【解决方案1】:
var result=DB.Review.Where(r => SqlFunctions.DataLength(r.ReviewText) / 2 > 200);

为什么是/ 2?因为DATALENGTH以字节为单位返回长度,而NTEXT包含Unicode字符,每个字符占用2个字节。

【讨论】:

    猜你喜欢
    • 2019-09-30
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    相关资源
    最近更新 更多