.NET 使用Expression构造多条件动态查询表达式树方法

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<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值