C# 基于动态条件的EF-LINQ滤波 使用实体框架6,存储库模式和域模型 我想根据用户是否选择了货币(通过FK链接到产品中)来过滤产品(模型) 过滤器将应用于货币的单独对象(表) 我曾考虑创建一个IQueryable扩展方法,但由于它是一个自定义类型,并且由于FK,仅在产品对象中使用,因此我认为这是行不通的
我希望避免的内容(因为我有很多查询产品的方法) 寻找想法和建议C# 基于动态条件的EF-LINQ滤波 使用实体框架6,存储库模式和域模型 我想根据用户是否选择了货币(通过FK链接到产品中)来过滤产品(模型) 过滤器将应用于货币的单独对象(表) 我曾考虑创建一个IQueryable扩展方法,但由于它是一个自定义类型,并且由于FK,仅在产品对象中使用,因此我认为这是行不通的,c#,entity-framework,C#,Entity Framework,我希望避免的内容(因为我有很多查询产品的方法) 寻找想法和建议 谢谢 这应该适合您: Func<Product, bool> predicate = x => x.BrandID == brandId && x.Name.Contains(productName); if (UserCurrency.userCurrency != -1) { predicate = x => x.BrandID == brandId &&
谢谢 这应该适合您:
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);
Func predicate=x=>x.BrandID==BrandID&&x.Name.Contains(productName);
如果(UserCurrency.UserCurrency!=-1)
{
谓词=x=>x.BrandID==BrandID&&
x、 名称。包含(productName)和
x、 MasterSite.CurrencyID==UserCurrency.UserCurrency;
}
返回_db.Products.Any(谓词);
在每种情况下都是可查询的。任何都采用表达式类型的参数
所以你可以把这个条件放在一个地方:
Expression<Func<TModel, bool>> pred;
if (whatever) {
pred = m => Condition(m)
} else {
pred = m => OtherCondition(m)
}
return db.Products.Any(pred);
expressionpred;
如果(无论什么){
pred=m=>条件(m)
}否则{
pred=m=>OtherCondition(m)
}
返回db.Products.Any(pred);
哪种可能更干净(取决于具体情况)
也可以动态地构建一个表达式
,但就像反射一样,它可以是大量的代码。。。使用System.Linq.Expressions
return\u db.Products.Any(x=>x.BrandID==BrandID&&x.Name.Contains(productName)&&&(x.MasterSite.CurrencyID==UserCurrency.UserCurrency==UserCurrency.UserCurrency==-1)
喜欢简单,我从来没有想到过,保罗欢呼道
Expression<Func<TModel, bool>> pred;
if (whatever) {
pred = m => Condition(m)
} else {
pred = m => OtherCondition(m)
}
return db.Products.Any(pred);