X-D*_*Dev 6 c# linq linq-to-entities entity-framework entity-framework-6
我在这里有一个简单的问题.首先使用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);
Run Code Online (Sandbox Code Playgroud)
第一个断言成功,那么为什么在执行results2和result 3时会出现以下异常?
EntityFramework.SqlServer.dll中出现"System.NotSupportedException"类型的异常,但未在用户代码中处理
附加信息:LINQ to Entities无法识别方法'System.Nullable`1 [System.Int32] DataLength(Byte [])'方法,并且此方法无法转换为存储表达式.
有没有办法让其他断言成功?
事实证明,答案是我使用了错误的功能.
代替
System.Data.Objects.SqlClient.SqlFunctions.DataLength
Run Code Online (Sandbox Code Playgroud)
我应该用
System.Data.Entity.SqlServer.SqlFunctions.DataLength
Run Code Online (Sandbox Code Playgroud)
位于EntityFramework.SqlServer.dll中
归档时间: |
|
查看次数: |
1696 次 |
最近记录: |