1.创建需要的对象,如下代码:
/// <summary>
/// 查询条件
/// </summary>
public class QueryCondition
{
/// <summary>
/// 查询对象集合
/// </summary>
public List<QueryObject> QueryObjects {
get; set; }
/// <summary>
/// 排序对象集合
/// </summary>
public List<OrderByObject> OrderBys {
get; set; }
/// <summary>
/// 逻辑操作
/// </summary>
public string LogicalOperator {
get; set; }
}
public class QueryObject
{
/// <summary>
/// 属性名称
/// </summary>
public string PropertyName {
get; set; }
/// <summary>
/// 操作符
/// </summary>
public string Operator {
get; set; }
/// <summary>
/// 值
/// </summary>
public object Value {
get; set; }
}
public class OrderByObject
{
/// <summary>
/// 属性名称
/// </summary>
public string PropertyName {
get; set; }
/// <summary>
/// 是否升序(true-升序;false-降序;)
/// </summary>
public bool Ascending {
get; set; }
}
2.构建个QueryableExtension类,写个方法BuildMultiConditionQueryExpression
public static class QueryableExtensions
{
/// <summary>
/// 动态查询
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="source"></param>
/// <param name="conditions"></param>
/// <param name="logicalOperator"></param>
/// <param name="orderBys"></param>
/// <returns></returns>
public static IQueryable<T> DynamicQuery<T>(this IQueryable<T> source, List<QueryObject> conditions, string logicalOperator, List<OrderByObject> orderBys)
{
// 应用查询条件
var predicate = BuildQueryExpression<T>(conditions, logicalOperator);
var query = source.Where(predicate);
// 应用排序条件
if (orderBys != null && orderBys.Any())
{
query = ApplyOrderBy(query, orderBys);
}
return query;
}
/// <summary>
/// 构建查询表达式
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="conditions"></param>
/// <param name="logicalOperator"></param>
/// <returns></returns>
/// <exception cref="ArgumentException"></exception>
public static Expression<Func<T, bool<