C#动态查询:巧用Expression组合多条件表达式

  • C#动态查询:巧用Expression组合多条件表达式已关闭评论
  • 63 次浏览
  • A+
所属分类:.NET技术
摘要

 概述: 在C#中,通过`Expression`类、`AndAlso`和`OrElse`方法可组合两个`Expression<Func<T, bool>>`,实现多条件动态查询。通过创建表达式树,可轻松构建复杂的查询条件。

C#动态查询:巧用Expression组合多条件表达式

 

概述:在C#中,通过`Expression`类、`AndAlso`和`OrElse`方法可组合两个`Expression<Func<T, bool>>`,实现多条件动态查询。通过创建表达式树,可轻松构建复杂的查询条件。

在C#中,可以使用AndAlsoOrElse方法组合两个Expression<Func<T, bool>>类型的表达式。以下是详细解释和实例源代码:

方法和步骤:

  1. 使用Expression类创建表达式树。
  2. 使用AndAlsoOrElse方法组合两个表达式。

详细实例源代码:

using System; using System.Linq.Expressions;  class Program {     static void Main()     {         // 步骤1:定义Person类         class Person         {             public string Name { get; set; }             public int Age { get; set; }         }          // 步骤2:创建Expression参数         ParameterExpression parameter = Expression.Parameter(typeof(Person), "p");          // 步骤3:创建第一个表达式,检查年龄是否大于等于 18         Expression<Func<Person, bool>> ageExpression = Expression.Lambda<Func<Person, bool>>(             Expression.GreaterThanOrEqual(                 Expression.Property(parameter, nameof(Person.Age)),                 Expression.Constant(18)             ),             parameter         );          // 步骤4:创建第二个表达式,检查姓名是否为 "John"         Expression<Func<Person, bool>> nameExpression = Expression.Lambda<Func<Person, bool>>(             Expression.Equal(                 Expression.Property(parameter, nameof(Person.Name)),                 Expression.Constant("John")             ),             parameter         );          // 步骤5:组合表达式,要求年龄大于等于 18 且姓名为 "John"         Expression<Func<Person, bool>> combinedExpression = Expression.Lambda<Func<Person, bool>>(             Expression.AndAlso(ageExpression.Body, nameExpression.Body),             parameter         );          // 步骤6:编译并使用组合后的表达式         var compiledExpression = combinedExpression.Compile();          // 步骤7:创建Person对象并测试         var person1 = new Person { Name = "John", Age = 20 };         var person2 = new Person { Name = "Alice", Age = 25 };          Console.WriteLine(compiledExpression(person1)); // 输出 True         Console.WriteLine(compiledExpression(person2)); // 输出 False     } }

在这个例子中,AndAlso方法用于将两个表达式组合成一个逻辑与的表达式。创建了两个简单的表达式来检查年龄和姓名条件,然后通过AndAlso方法组合成一个新的表达式。最后,使用Compile方法将组合后的表达式编译为委托,可以用于实际的数据测试。

 

C#动态查询:巧用Expression组合多条件表达式