Expression.Like in C#

Expression.Like in C#,第1张

概述例如:x => x.Name =“g” 我有这样的代码块 public Expression<Func<TEntity, bool>> SearchExpression(){ var c = new ConstantExpression[_paramList.Count]; var b = new BinaryExpression[_paramList.Count]; B 例如: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;

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

总结

以上是内存溢出为你收集整理的Expression.Like in C#全部内容,希望文章能够帮你解决Expression.Like in C#所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1249838.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存