将StringComparison重载用于谓词时,EF Core中的NullReferenceException

时间:2019-04-03 15:08:43

标签: c# entity-framework linq entity-framework-core

我们正在将项目从使用EF转换为使用EF Core。我们有下面的代码行可以使用,但是现在不行了:

// throws NullReferenceException
var u = db.Users.FirstOrDefault(x => x.PresenterID.Equals(uid, StringComparison.OrdinalIgnoreCase));

但是,如果我们不使用StringComparison重载,它将起作用:

// this works
var u = db.Users.FirstOrDefault(x => x.PresenterID.Equals(uid));

这是一个大项目,我们希望避免查找和修改所有进行此类比较的代码。为什么这会引发NullReferencException,并且可以在不更改我们的代码的情况下将其避免?这是堆栈跟踪。谢谢。

  

在lambda_method(Closure,User)在   System.Linq.Enumerable.WhereEnumerableIterator 1.MoveNext() at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable 1源)
  在   Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider.ResultEnumerable 1.GetEnumerator() at Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider.<_TrackEntities>d__17 2.MoveNext()   在   Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider.ExceptionInterceptor 1.EnumeratorExceptionInterceptor.MoveNext() at System.Linq.Enumerable.First[TSource](IEnumerable 1来源)   Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler。<> c__DisplayClass15_1`1.b__0(QueryContext   qc)   Our.Project.Service.ContractsFolderService.ValidateContractUsers(BIContract   xmlContract,IDataContext db)中   C:\ Projects \ Out.Project \ Main \ Service \ ContractsFolderService.cs:line   436

1 个答案:

答案 0 :(得分:1)

根据EntityFrameworkCore Github存储库上的this open issue,LINQ to SQL尚不支持重载。请参阅以下特定评论,其中提供了有关防止翻译此重载的问题的详细信息:https://github.com/aspnet/EntityFrameworkCore/issues/1222#issuecomment-443116169

我猜测是发生了空引用异常,因为它会拉回所有结果以在客户端评估您的字符串比较,并且对于其中一个或多个结果PresenterID为空。