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; 这将为您返回二进制表达式. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |