我在这里有一个简单的问题。
首先使用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);
第一个断言成功,所以为什么在执行result2和result 3时出现以下异常?

有什么办法让其他断言成功吗?

最佳答案

事实证明,答案是我使用了错误的函数。

代替

System.Data.Objects.SqlClient.SqlFunctions.DataLength

我应该用
System.Data.Entity.SqlServer.SqlFunctions.DataLength

位于EntityFramework.SqlServer.dll中

关于c# - 错误: LINQ to Entities does not recognize the method DataLength,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25967201/

10-09 01:28