翼度科技»论坛 编程开发 .net 查看内容

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

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
 
概述:在C#中,通过`Expression`类、`AndAlso`和`OrElse`方法可组合两个`Expression`,实现多条件动态查询。通过创建表达式树,可轻松构建复杂的查询条件。
在C#中,可以使用AndAlso和OrElse方法组合两个Expression类型的表达式。以下是详细解释和实例源代码:
方法和步骤:


  • 使用Expression类创建表达式树。
  • 使用AndAlso和OrElse方法组合两个表达式。
详细实例源代码:
  1. using System;
  2. using System.Linq.Expressions;
  3. class Program
  4. {
  5.     static void Main()
  6.     {
  7.         // 步骤1:定义Person类
  8.         class Person
  9.         {
  10.             public string Name { get; set; }
  11.             public int Age { get; set; }
  12.         }
  13.         // 步骤2:创建Expression参数
  14.         ParameterExpression parameter = Expression.Parameter(typeof(Person), "p");
  15.         // 步骤3:创建第一个表达式,检查年龄是否大于等于 18
  16.         Expression<Func<Person, bool>> ageExpression = Expression.Lambda<Func<Person, bool>>(
  17.             Expression.GreaterThanOrEqual(
  18.                 Expression.Property(parameter, nameof(Person.Age)),
  19.                 Expression.Constant(18)
  20.             ),
  21.             parameter
  22.         );
  23.         // 步骤4:创建第二个表达式,检查姓名是否为 "John"
  24.         Expression<Func<Person, bool>> nameExpression = Expression.Lambda<Func<Person, bool>>(
  25.             Expression.Equal(
  26.                 Expression.Property(parameter, nameof(Person.Name)),
  27.                 Expression.Constant("John")
  28.             ),
  29.             parameter
  30.         );
  31.         // 步骤5:组合表达式,要求年龄大于等于 18 且姓名为 "John"
  32.         Expression<Func<Person, bool>> combinedExpression = Expression.Lambda<Func<Person, bool>>(
  33.             Expression.AndAlso(ageExpression.Body, nameExpression.Body),
  34.             parameter
  35.         );
  36.         // 步骤6:编译并使用组合后的表达式
  37.         var compiledExpression = combinedExpression.Compile();
  38.         // 步骤7:创建Person对象并测试
  39.         var person1 = new Person { Name = "John", Age = 20 };
  40.         var person2 = new Person { Name = "Alice", Age = 25 };
  41.         Console.WriteLine(compiledExpression(person1)); // 输出 True
  42.         Console.WriteLine(compiledExpression(person2)); // 输出 False
  43.     }
  44. }
复制代码
在这个例子中,AndAlso方法用于将两个表达式组合成一个逻辑与的表达式。创建了两个简单的表达式来检查年龄和姓名条件,然后通过AndAlso方法组合成一个新的表达式。最后,使用Compile方法将组合后的表达式编译为委托,可以用于实际的数据测试。
 



来源:https://www.cnblogs.com/hanbing81868164/p/18183514
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具