带有Sql Compact Edition 4.0的Entity Framework 4.0-未实现的异常

问题描述

|| 我有这个LINQ查询:
    var children = DataContext.Entities.Nodes
                    .Where(n => n.Parent.Name == node.Key)
                    .OrderBy(n => n.SortOrder);

    foreach (var child in children)
        var childNode = CreateNode(child);
使用SQL Server时,一切正常。但是,使用SqlCe时,出现以下错误:
[SqlCeException (0x80004005): Not implemented]
   System.Data.SqlServerCe.SqlCeDataReader.ProcessResults(Int32 hr) +125
   System.Data.SqlServerCe.SqlCeDataReader.IsEndOfRowset(Int32 hr) +131
   System.Data.SqlServerCe.SqlCeDataReader.Move(DIRECTION direction) +376
   System.Data.SqlServerCe.SqlCeDataReader.Read() +95
   System.Data.Common.Internal.Materialization.Shaper`1.StoreRead() +44

[EntityCommandExecutionException: An error occurred while reading from the store provider\'s data reader. See the inner exception for details.]
   System.Data.Common.Internal.Materialization.Shaper`1.StoreRead() +130
   System.Data.Common.Internal.Materialization.SimpleEnumerator.MoveNext() +46
知道这里发生了什么吗? 我什至尝试在
foreach
之前叫
ToArray()
,但这没有帮助。 编辑: 如果我将查询更改为:
    var children = DataContext.Entities.Nodes
                    .Where(n => n.Parent.Name == node.Key)
                    .ToArray()
                    .OrderBy(n => n.SortOrder);
有效...为什么? 编辑2:顺便说一句,“ 5”导航器指向同一张表,因此每个“ 6”可以具有{0..1}父“ 6”。     

解决方法

您的“编辑”部分中的查询有效的事实表明问题出在
OrderBy(n => n.SortOrder)
子句中,因为仅这部分查询...
DataContext.Entities.Nodes
                    .Where(n => n.Parent.Name == node.Key)
...实际上是在服务器上执行的。通过调用“ 10”,您可以强制执行查询并将(未排序的)列表加载到内存中。以下“ 11”定义了此列表中的查询(不再是“ 13”,而是“ 12”)。然后,第二个查询将在此列表的内存中执行,并且EF或SqlCe不参与此排序。 但通常SqlCe支持
OrderBy
,因此问题仍然是为什么第一个查询会引发异常。 您尝试排序的
Node.SortOrder
是什么类型?它是可以为空的,还是SqlCe无法排序的某些\“ exotic \”类型?     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...