我必须将以下内容添加到此过滤器中,

“如果传入的 CountryID 等于 (999),则搜索应搜索所有国家/地区,而不是按国家/地区过滤。”

我目前拥有的是这个,这完全让我感到困惑。

var query = rep.
    FindWhere(c =>
        (
            countryID.HasValue == false ||
            c.CityID == null ||
            c.Countries.ID == countryID
        )
        &&
        (
            mediaTypeID == 0 ||
            c.MediaTypeID == mediaTypeID
        )
        && c.Active);

我假设如果第一个括号中的条件为真,那么它将与所有国家/地区匹配?!如果是这样,那么我可以在第一个括号中添加一个额外的表达式来检查 countryID 999?

附: FindWhere是:
public IQueryable<T> FindWhere(Expression<Func<T, bool>> predicate)
{
    return _dbSet.Where(predicate);
}

最佳答案

rep.FindWhere(c => (c.CityID == null || !countryID.HasValue ||
                    countryID == 999 || c.Countries.ID == countryID) &&
                   (mediaTypeID == 0 || c.MediaTypeID == mediaTypeID))

顺便说一句,您的条件逻辑真的很难理解。考虑重构你的代码。

关于c# - Linq FindWhere 子句和 bool 过滤器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15640405/

10-12 07:39