EF Core 2.2-在两个不同列上的StartsWith

时间:2019-07-03 15:23:38

标签: entity-framework-core

我有一个查询来获取所有记录,其中两个不同的列以相同的字符开头:

var query = _db.Projects.AsQueryable();
query = query.Where(p => p.InternalOrder.StartsWith("G") || p.CostCenter.StartsWith("G"));
var list = query.toList();

这总是以异常结束。当我更改查询以便仅查询一列时,一切正常:

var query = _db.Projects.AsQueryable();
query = query.Where(p => p.InternalOrder.StartsWith("G") || p.InternalOrder.StartsWith("G"));
var list = query.toList();

这是错误还是无法解决?

编辑: 这是例外;什么都没告诉我:

System.NullReferenceException: Object reference not set to an instance of an object.
   at lambda_method(Closure , Project )
   at System.Linq.Enumerable.WhereEnumerableIterator`1.ToArray()
   at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
   at System.Linq.OrderedEnumerable`1.GetEnumerator()+MoveNext()
   at System.Linq.Enumerable.SelectIPartitionIterator`2.MoveNext()
   at Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider._TrackEntities[TOut,TIn](IEnumerable`1 results, QueryContext queryContext, IList`1 entityTrackingInfos, IList`1 entityAccessors)+MoveNext()
   at Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider.ExceptionInterceptor`1.EnumeratorExceptionInterceptor.MoveNext()
   at System.Collections.Generic.List`1.AddEnumerable(IEnumerable`1 enumerable)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at BMP_App.Controllers.Api.ProjectController.GetProjectList(DataSourceRequest request) in D:\...\Controllers\Api\ProjectController.cs:line 72

EDIT2: 这仅在使用内存数据库时发生。使用Sql-Server没问题。

1 个答案:

答案 0 :(得分:2)

作为一个异常,您得到的是NullReferenceException,因此两个字符串字段之一为null。最好检查字符串上的空值,除非您保证它们不为空。 SQLServer不会发生这种情况的原因是该语句被转换为SQL语句并在SQL Server中运行,该SQL Server不会引发null异常,而是忽略null值。尝试更改查询以检查空值:

query.Where(p => (p.InternalOrder != null && p.InternalOrder.StartsWith("G))
  || (p.CostCenter != null && p.CostCenter.StartsWith("G")))