通用类的谓词builder
我正在尝试创建一种方法,其中我将通过包含字段,比较和价值的过滤器列表。这是我现在的参数
public class QueryFilter
{
public string Field { get; set; }
public object Value { get; set; }
public string Comparer { get; set; }
}
,我创建了一种方法,该方法将根据传递的QueryFilter列表返回表达式。
public Expression<Func<TEntity, bool>> QueryFilterBuilder<TEntity>(List<QueryFilter> filters)
{
try
{
var predicate = PredicateBuilder.New<TEntity>(true);
filters.ForEach(filter =>
{
switch (filter.Comparer.ToLower())
{
case QueryFilterComparer.Eq: // equals
predicate = predicate.And(x => filter.Field == filter.value); // something like this
break;
case QueryFilterComparer.Ne: // not equal
// Add not equal filter logic here
break;
case QueryFilterComparer.Any: // any
break;
case QueryFilterComparer.Gt: // greater than
break;
case QueryFilterComparer.Gte: // greater than equal
break;
case QueryFilterComparer.Lt: // less than
break;
case QueryFilterComparer.Lte: // less than equal
break;
case QueryFilterComparer.Contains: // contains
break;
default:
break;
};
});
return predicate;
}
catch (Exception)
{
throw;
}
}
问题是我不确定如何使用通用类实现此目标。可以这样做吗?
I am trying to create a method where I'll pass a list of filters containing the field,comparer and value. Here is my parameter
public class QueryFilter
{
public string Field { get; set; }
public object Value { get; set; }
public string Comparer { get; set; }
}
Now, I created a method that will return an expression based on the list of QueryFilter that was passed.
public Expression<Func<TEntity, bool>> QueryFilterBuilder<TEntity>(List<QueryFilter> filters)
{
try
{
var predicate = PredicateBuilder.New<TEntity>(true);
filters.ForEach(filter =>
{
switch (filter.Comparer.ToLower())
{
case QueryFilterComparer.Eq: // equals
predicate = predicate.And(x => filter.Field == filter.value); // something like this
break;
case QueryFilterComparer.Ne: // not equal
// Add not equal filter logic here
break;
case QueryFilterComparer.Any: // any
break;
case QueryFilterComparer.Gt: // greater than
break;
case QueryFilterComparer.Gte: // greater than equal
break;
case QueryFilterComparer.Lt: // less than
break;
case QueryFilterComparer.Lte: // less than equal
break;
case QueryFilterComparer.Contains: // contains
break;
default:
break;
};
});
return predicate;
}
catch (Exception)
{
throw;
}
}
The problem is I'm not sure how to implement this with generic class. Is it possible to do this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以使用Expression API这样实现此信息:
You can implement this using Expression api like so: