0

我有一个 LINQ 查询:

Dim result = DataContext.Items.Select(Function(p) New With {
                                          .Category = If(p.Category IsNot Nothing, p.Category.Name, String.Empty)
                                          .Name = p.Name
                                      })

这适用于 SQL Server 2005,2008,2012 数据库。当我针对 SQL CE 4.0 DB 运行它时,我得到了这个异常:

异常详细信息:System.Data.SqlServerCe.SqlCeException:函数的指定参数值无效。[ 参数 # = 3,函数名称(如果已知)= case ]

我已将问题隔离到String.Empty. 如果我""直接使用,代码运行良好。如果我使用它也可以.Category = String.EmptyMemberAccessExpression似乎是SqlCe 如何处理If MethodCallExpression.

如果我取出.Category线路,一切正常。在 LINQ to SQL CE 4 中进行空检查的正确方法是什么?我已经检查了Skeet 的答案,但我实际上想检查 DB 值,而不是我的值。我也看过这个答案,但它会将所有内容加载到内存中,这会破坏使用 LINQ 的目的。

升级到 EF 6 RC 后我仍然有例外(根据 ErikEJ 的建议)。这是一个堆栈跟踪:

at System.Data.SqlServerCe.SqlCeCommand.ProcessResults(Int32 hr)
at System.Data.SqlServerCe.SqlCeCommand.CompileQueryPlan()
at System.Data.SqlServerCe.SqlCeCommand.ExecuteCommand(CommandBehavior behavior, String method, ResultSetOptions options)
at System.Data.SqlServerCe.SqlCeCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.Entity.SqlServerCompact.SqlCeMultiCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.Entity.SqlServerCompact.SqlCeMultiCommand.ExecuteDbDataReader(CommandBehavior behavior)
at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.<>c__DisplayClassb.<Reader>b__8()
at System.Data.Entity.Infrastructure.Interception.InternalDispatcher`1.Dispatch[TInterceptionContext,TResult](Func`1 operation, TInterceptionContext interceptionContext, Action`1 executing, Action`1 executed)
at System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.Reader(DbCommand command, DbCommandInterceptionContext interceptionContext)
at System.Data.Entity.Internal.InterceptableDbCommand.ExecuteDbDataReader(CommandBehavior behavior)
at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior)
4

1 回答 1

0

这是当前发布的 SQL Server Compact 实体框架提供程序中的一个错误,已在版本 6 https://entityframework.codeplex.com/workitem/287中修复。Emtity Framework 6 支持 .NET 4.0,你想要的 NuGet 包是 EntityFramework.SqlServerCompact

于 2013-10-03T07:10:00.600 回答