我更喜欢避免(因为我有很多查询产品的方法)
public bool DoesUniqueHaveChildProducts(string productName, int brandId)
{
if (UserCurrency.userCurrency == -1)
{
//don't filter
return _db.Products.Any(x => x.BrandID == brandId && x.Name.Contains(productName));
}
return _db.Products.Any(x => x.BrandID == brandId && x.Name.Contains(productName) && x.MasterSite.CurrencyID == UserCurrency.userCurrency);
}
寻找想法&建议
谢谢!
答案 0 :(得分:1)
这应该适合你:
Func<Product, bool> predicate = x => x.BrandID == brandId && x.Name.Contains(productName);
if (UserCurrency.userCurrency != -1)
{
predicate = x => x.BrandID == brandId &&
x.Name.Contains(productName) &&
x.MasterSite.CurrencyID == UserCurrency.userCurrency;
}
return _db.Products.Any(predicate);
答案 1 :(得分:1)
在每种情况下,Queryable<TModel>.Any
都会使用Expression<Func<TModel, bool>>
类型的参数。
所以你可以把条件放在本地:
Expression<Func<TModel, bool>> pred;
if (whatever) {
pred = m => Condition(m)
} else {
pred = m => OtherCondition(m)
}
return db.Products.Any(pred);
可能更干净(取决于情况)。
也可以动态地构建Expression<whatever>
,但是可以使用System.Linq.Expressions
中的类型来反映大量代码......