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

.NET Core 6自定义Expression类无法调用框架Parameter/Property方法

问题根源

你的自定义类命名为Expression,与.NET框架的System.Linq.Expressions.Expression静态类重名。编译器会优先将代码中的Expression解析为你自己的类,而非框架提供的静态类,因此找不到Parameter、Property这些静态方法。

解决方案

提供三种可行方案,按需选择:

1. 使用完整命名空间限定调用框架类

直接在调用时指定框架Expression类的完整命名空间,明确告诉编译器要调用的是框架方法:

public override Expression<Func<Company, bool>> GetExpression(DzbcDbContext context, string name)
{
     // 目标查询:_dzbcDbContext.CompanyProfiles.Where(c => c.Name.Contains(name));
     var cParameter = System.Linq.Expressions.Expression.Parameter(typeof(Company), "c");
     var cCompanyNameProperty = System.Linq.Expressions.Expression.Property(cParameter, "Name");
     
     // 补充构建完整的Contains调用与Lambda表达式
     var containsMethod = typeof(string).GetMethod("Contains", new[] { typeof(string) });
     var nameConstant = System.Linq.Expressions.Expression.Constant(name);
     var containsCall = System.Linq.Expressions.Expression.Call(cCompanyNameProperty, containsMethod, nameConstant);
     
     return System.Linq.Expressions.Expression.Lambda<Func<Company, bool>>(containsCall, cParameter);
}

2. 给框架类添加别名简化调用

在文件顶部的using语句中给框架的Expression类设置别名,后续代码用别名代替,避免重复写长命名空间:

// 顶部添加别名
using LinqExpr = System.Linq.Expressions.Expression;

// ... 其他using语句和类定义

public override Expression<Func<Company, bool>> GetExpression(DzbcDbContext context, string name)
{
     var cParameter = LinqExpr.Parameter(typeof(Company), "c");
     var cCompanyNameProperty = LinqExpr.Property(cParameter, "Name");
     
     var containsMethod = typeof(string).GetMethod("Contains", new[] { typeof(string) });
     var nameConstant = LinqExpr.Constant(name);
     var containsCall = LinqExpr.Call(cCompanyNameProperty, containsMethod, nameConstant);
     
     return LinqExpr.Lambda<Func<Company, bool>>(containsCall, cParameter);
}

3. 重命名自定义类(推荐长期维护)

直接修改自定义类的名称,从根源上避免命名冲突,比如改为CompanyExpressionBuilder:

namespace DZBC.Infrastructure.Expression
{
    public partial class CompanyExpressionBuilder : ExpressionBase<CompanyReadDTO>
    {
        // ... 原有方法逻辑保持不变,仅类名修改
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:10:27