我对使用 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());
}