You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何扩展Regex.IsMatch表达式树生成方法以支持嵌套属性

实现支持嵌套属性的Regex表达式树构建方法

原方法仅能处理实体的直接属性,无法解析entity.sub_entity.property这类嵌套属性路径。通过拆分属性路径并逐层构建属性访问表达式,可实现递归动态生成嵌套属性的表达式树,修改后的完整代码如下:

using System;
using System.Linq.Expressions;
using System.Text.RegularExpressions;

public static class ExpressionBuilder
{
    public static Expression<Func<T, bool>> CreateRegExExpression<T>(string pattern, string property)
    {
        var paramObject = Expression.Parameter(typeof(T), "e");
        Expression currentExpression = paramObject;

        // 拆分嵌套属性路径
        var propertySegments = property.Split('.');
        foreach (var segment in propertySegments)
        {
            // 逐层构建属性访问表达式
            currentExpression = Expression.Property(currentExpression, segment);
        }

        var patternConstant = Expression.Constant(pattern, typeof(string));
        var isMatchMethod = typeof(Regex).GetMethod("IsMatch", new[] { typeof(string), typeof(string) });
        
        if (isMatchMethod == null || !isMatchMethod.IsStatic)
            throw new NotSupportedException("无法获取Regex.IsMatch静态方法");

        var callExpression = Expression.Call(null, isMatchMethod, currentExpression, patternConstant);
        return Expression.Lambda<Func<T, bool>>(callExpression, paramObject);
    }
}

关键修改说明

  • 拆分属性路径:使用Split('.')将传入的属性字符串拆分为多个层级的属性名,例如"sub_entity.property"会被拆分为["sub_entity", "property"]
  • 逐层构建属性访问链:从根参数表达式开始,循环遍历每个属性段,依次调用Expression.Property生成嵌套的属性访问表达式,最终得到对应嵌套属性的表达式节点
  • 简化冗余代码:移除原方法中多余的Expression.TypeAs调用,因为paramObject本身就是typeof(T)类型的参数表达式

使用示例

假设存在如下实体类:

public class Entity
{
    public SubEntity SubEntity { get; set; }
}

public class SubEntity
{
    public string Property { get; set; }
}

调用方法生成嵌套属性的Regex表达式:

var expression = ExpressionBuilder.CreateRegExExpression<Entity>("^abc.*$", "SubEntity.Property");

该表达式等价于手动编写的:

Expression<Func<Entity, bool>> lambda = e => Regex.IsMatch(e.SubEntity.Property, "^abc.*$");

内容的提问来源于stack exchange,提问作者mtholen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 23:17:38