我必须将以下内容添加到此过滤器中,
“如果传入的 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/