我有一個LINQ查詢:如何做一個LINQ空校驗,以實體SQL CE 4.0
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 DB。當我運行它針對SQL CE 4.0數據庫,我得到這個異常:
異常詳細信息:System.Data.SqlServerCe.SqlCeException:該函數的指定的參數 值無效。 [參數#= 3, 功能(如果已知)的名稱=情況下]
我已經分離出的問題String.Empty
。如果我直接使用""
,代碼運行良好。如果我使用.Category = String.Empty
,它也可以工作。看起來像SqlCe在If
MethodCallExpression
內處理MemberAccessExpression
的錯誤。
如果我拿出.Category
行,一切工作正常。什麼是在LINQ to SQL CE 4中進行空檢查的正確方法?我檢查了Skeet's answer,但我確實想檢查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)
我認爲這是EF提供程序中用於SQLCE的錯誤,在版本6中已修復https://entityframework.codeplex.com/workitem/287 – ErikEJ
@ErikEJ我在.NET 4.0上,無法升級到4.5。任何方式來獲得修復? (AFAIK EF 4.3+需要.NET 4.5)。 –
實體框架6適用於.NET 4 – ErikEJ