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

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

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

 
2 人赞同了该文章

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

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

方法和步骤:

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

详细实例源代码:

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方法将组合后的表达式编译为委托,可以用于实际的数据测试。

 

更多技术文章,技术资源请关注公众号:架构师老卢

作者简介:
公众号【架构师老卢】,头条号【架构师老卢】20年资深软件架构师,分享编程、软件设计经验,教授前沿技术,分享技术资源(每天分享一本电子书),分享职场感悟。
发布于 2024-05-10 08:57・IP 属地上海

posted on   漫思  阅读(24)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
历史上的今天:
2022-11-12 中国航天科工二院七〇六所加入 openKylin 社区!
2022-11-12 openKylin
2022-11-12 C# 11 正式发布
2022-11-12 抽烟腿软怎么回事
2021-11-12 BaaS
2021-11-12 几款主流好用的富文本编辑器(所见即所得常用编辑器)介绍
2021-11-12 【解决】Uncaught SyntaxError: Unexpected end of JSON input at JSON.parse

导航

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8
点击右上角即可分享
微信分享提示