我尝试创建通用方法来过滤数据库中的不同实体,以避免为每个实体创建庞大的方法,并使用非常相似的 if 语句组合过滤规则。
现在我正在尝试创建表示相等比较的表达式,作为描述要比较的属性和某个值的参数表达式。
我的概念如何解决问题以及我根据其他帖子创建的内容显示了以下代码片段:
public class FuelCard
{
public int Id { get; set; }
public string Number { get; set; }
public virtual User User { get; set; }
}
public static IQueryable<TEntity> ApplyFilter<TEntity, TProperty>(
this IQueryable<TEntity> query,
Expression<Func<TEntity, TProperty>> expr, TProperty value)
{
Expression<Func<TEntity, bool>> predicate = param => true;
var filterExpression = Expression.Equal(expr, Expression.Constant(value));
var lambda = Expression.Lambda<Func<TEntity, bool>>(filterExpression);
predicate = predicate.And(lambda);
return query.Where(predicate);
}
Run Code Online (Sandbox Code Playgroud)
最后我想这样使用它:
IQueryable<FuelCard> query = // Get cards from database as IQueryable …Run Code Online (Sandbox Code Playgroud)