C# 对谓词使用StringComparison重载时EF Core中出现NullReferenceException
我们正在将一个项目从使用EF转换为使用EF核心。我们有以下代码行,以前可以工作,但现在不行:C# 对谓词使用StringComparison重载时EF Core中出现NullReferenceException,c#,entity-framework,linq,entity-framework-core,C#,Entity Framework,Linq,Entity Framework Core,我们正在将一个项目从使用EF转换为使用EF核心。我们有以下代码行,以前可以工作,但现在不行: // throws NullReferenceException var u = db.Users.FirstOrDefault(x => x.PresenterID.Equals(uid, StringComparison.OrdinalIgnoreCase)); 但是,如果我们不使用StringComparison重载,它可以工作: // this works var u = db.User
// 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));
这是一个大型项目,我们希望避免查找和修改进行此类比较的所有代码。为什么这会抛出一个NullReferenceException,并且在不更改代码的情况下可以避免它?这是堆栈跟踪。谢谢
在lambda_methodClosure,用户位于
System.Linq.Enumerable.WhereEnumerableInterator1.MoveNext位于
System.Linq.Enumerable.FirstOrDefault[TSource]IEnumerable1源
在
Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider.ResultEnumerable1.GetEnumerator
在
Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider.d\uu 172.MoveNext
在
Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider.ExceptionInterceptor 1.EnumeratorExceptionInterceptor.MoveNext
位于System.Linq.Enumerable.First[TSource]IEnumerable1的源
Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.c_uuDisplayClass15_1`1.b_uu\u0QueryContext
质控处
我们的.Project.Service.ContractsFolderService.ValidateTractUsersBIContract
xmlContract,IDataContext数据库位于
C:\Projects\Out.Project\Main\Service\ContractsFolderService.cs:line
436
根据EntityFrameworkCore Github repo的研究,LINQ to SQL还不支持这种重载。请参阅此特定注释,其中提供了有关阻止此重载被转换的问题的一些详细信息:
我猜发生null引用异常是因为它会回调所有结果以评估客户端上的字符串比较,并且对于其中一个或多个结果,PresenterID为null