[英]Entity Framework error using DefaultIfEmpty()
我使用DefaultIfEmpty方法的实体框架有问题。 以下查询在应返回与数据库中所有条件匹配的商品时返回空。
如果删除一个或两个DefaultIfEmpty
方法调用,它将起作用,但使用它们则无效。 我需要那些来防止查询中的另一个问题。
当我直接在数据库上执行生成的SQL查询时,它可以工作并返回报价。
我还进行了单元测试,再现了相同的示例,并且该示例也通过了,因此必须是实体框架问题。
这是查询:
private static Expression<Func<Offer, bool>> AddFilter(Service criteria)
{
return offer => offer.Restrictions.
SelectMany(rest => rest.OperatorRange.DefaultIfEmpty(), (rest, alop) => new { Restriction = rest, OperatorRange = alop.Id }).
Where(alop => criteria.ServiceUseNet == null || alop.OperatorRange.ToUpper() == criteria.ServiceUseNet.ToUpper()).
SelectMany(rest => rest.Restriction.CallType.DefaultIfEmpty(), (rest, till) => new { Restriction = rest, CallType = till.Id }).
Any(till => criteria.UseServiceCoverage == null || till.CallType.ToUpper() == criteria.UseServiceCoverage.ToUpper());
}
将其更改为两个“ Any
调用:
return offer => offer.Restrictions
.Any(rest
=> rest.OperatorRange
.Where(alop => criteria.ServiceUseNet == null
|| alop.OperatorRange.ToUpper() == criteria.ServiceUseNet.ToUpper())
.Any(till => criteria.UseServiceCoverage == null
|| till.CallType.ToUpper() == criteria.UseServiceCoverage.ToUpper()));
谓词是应该测试是否有任何 OperatorRange
S(会议一些条件)具有任意 CallType
的会议的一些标准。 如果没有OperatorRange
,那么也不会有CallType
,更不用说匹配CallType
。
以这种形式,谓词始终返回true或false。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.