加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 错误:LINQ to Entities无法识别DataLength方法

发布时间:2020-12-15 04:28:31 所属栏目:百科 来源:网络整理
导读:我在这里有一个简单的问题. 首先使用EF6模型. var db = new MyEntities(GetEntityConnectionString());ObjectContext objectContext = ((IObjectContextAdapter)db).ObjectContext;ObjectSetDOCUMENT objectSet = objectContext.CreateObjectSetDOCUMENT();v
我在这里有一个简单的问题.
首先使用EF6模型.
var db = new MyEntities(GetEntityConnectionString());

ObjectContext objectContext = ((IObjectContextAdapter)db).ObjectContext;
ObjectSet<DOCUMENT> objectSet = objectContext.CreateObjectSet<DOCUMENT>();
var results = objectSet.Where("SqlServer.DATALENGTH(it.BINARYCONTENT)>50000");
Assert.IsTrue(results.ToList().Count == 9);

var results2 = objectSet.Where(doc=>System.Data.Objects.SqlClient.SqlFunctions.DataLength( doc.BINARYCONTENT)>50000);
Assert.IsTrue(results2.ToList().Count == 9);

var results3 = db.DOCUMENTS.Where(doc => System.Data.Objects.SqlClient.SqlFunctions.DataLength(doc.BINARYCONTENT) > 50000);
Assert.IsTrue(results3.ToList().Count == 9);

第一个断言成功,那么为什么在执行results2和result 3时会出现以下异常?

An exception of type ‘System.NotSupportedException’ occurred in EntityFramework.SqlServer.dll but was not handled in user code

Additional information: LINQ to Entities does not recognize the method ‘System.Nullable`1[System.Int32] DataLength(Byte[])’ method,and this method cannot be translated into a store expression.

有没有办法让其他断言成功?

解决方法

事实证明,答案是我使用了错误的功能.

代替

System.Data.Objects.SqlClient.SqlFunctions.DataLength

我应该用

System.Data.Entity.SqlServer.SqlFunctions.DataLength

位于EntityFramework.SqlServer.dll中

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读