Entity Framework 使用 DefaultIfEmpty() 时出错

Entity Framework error using DefaultIfEmpty()

我在 Entity Framework 使用 DefaultIfEmpty 方法时遇到问题。以下查询 return 为空,而它应该 return 符合数据库中所有条件的报价。

如果我删除一个或两个 DefaultIfEmpty 方法调用,它会起作用,但对它们不起作用。我需要这些来防止查询中的另一个问题。

当我直接在数据库上执行生成的 SQL 查询时,它会工作并且 return 是报价。

我还做了一个单元测试来重现相同的例子,它也通过了,所以它一定是一个 Entity Framework 问题。

查询如下:

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()));

谓词应该测试是否有 any OperatorRanges(满足某些条件)具有 any CallTypes 符合某些标准。如果没有 OperatorRanges,也不会有任何 CallTypes,更不用说匹配 CallTypes.

在这种形式中,谓词总是 returns true 或 false。