加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Expression.Like in C#

发布时间:2020-12-15 08:30:03 所属栏目:百科 来源:网络整理
导读:例如:x = x.Name =“g” 我有这样的代码块 public ExpressionFuncTEntity,bool SearchExpression(){ var c = new ConstantExpression[_paramList.Count]; var b = new BinaryExpression[_paramList.Count]; BinaryExpression comparisonExpression = null;
例如:x => x.Name =“g”

我有这样的代码块

public Expression<Func<TEntity,bool>> SearchExpression()
{
    var c = new ConstantExpression[_paramList.Count];
    var b = new BinaryExpression[_paramList.Count];
    BinaryExpression comparisonExpression = null;

    var entity = Expression.Parameter(typeof(TEntity));

    for (int i = 0; i < _paramList.Count; i++)
    {
        var value = Convert.ChangeType(_paramList[i].Item2 /*"g"*/,_paramList[i].Item3 /*System.String*/);
        c[i] = Expression.Constant(value); //"g"

        // PROBLEM IS HERE
        b[i] = Expression.Equal(Expression.Property(entity,_paramList[i].Item1 /*Name*/,c[i]);
        // PROBLEM IS HERE



    }
    _paramList.Clear();
    comparisonExpression = b.Aggregate(Expression.And);
    return Expression.Lambda<Func<TEntity,bool>>(comparisonExpression,entity);
}

像魅力一样工作,但我需要Expression.Like(喜欢“g”不等于“g”)

Expression.Like(Expression.Property(entity,_paramList[i].Item1),c[i])

但是C#表达式树不支持Like方法

更新:

我写了这样的东西:

Expression.Call(Expression.Property(entity,typeof(String).GetMethod("Contains"),new Expression[] { c[i] });

但我需要BinaryExpression而不是MethodCallExpression

解决方法

您可以通过在方法调用上添加equals表达式来使代码工作,如下所示:
b[i] = Expression.Equal(
        Expression.Call(Expression.Property(entity,typeof (String).GetMethod("Contains"),new Expression[] {c[i]}),Expression.Constant(true));

在伪代码中,它读作:

b[i] = entity => entity.someProperty.Contains(c[i]) == true;

这将为您返回二进制表达式.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读