繁体   English   中英

使用DefaultIfEmpty()的实体框架错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM