
我有这样的代码块
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#所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)