2016-10-17 19 views
0

Vor Update Projekt .net Kern (von voller .net) fusionieren, ich habe etw wie das verwendet, beetwen zwei Ausdrücke und Betrieb zu tun:Wie Ausdrücke in .net Kern

public class ExpressionBuilder<T> 
{ 
    private Expression<Func<T, bool>> _mainExpression; 

    public ExpressionBuilder() 
    { 
     _mainExpression = e => true; 
    } 

    public void AddExpression(Expression<Func<T, bool>> expression) 
    { 
     _mainExpression = _mainExpression.And(expression); 
    } 

    public Expression<Func<T, bool>> Build() 
    { 
     return _mainExpression; 
    } 
} 

Jetzt Variable _mainExpression hat keine Methode implementiert Und. Was soll ich tun, um zwei Ausdrücke zusammenzuführen?

+1

Hat das jemals funktioniert? –

+0

Ja, es hat funktioniert. – pakos

+0

Welcher Rahmen. Ich testete 4.5 und 4.6 mit mit System.Linq; mit System.Linq.Expressions; Sind Sie sicher, dass dies nicht Ihre benutzerdefinierte Erweiterungsmethode war? Https://msdn.microsoft.com/en-us/library/system.linq.expressions.lambdaexpression (v = vs.110) .aspx https: // msdn. microsoft.com/en-us/library/bb335710(v=vs.110).aspx –

Antwort

0

Try this:

  Expression<Func<string, bool>> exp = x => x.Contains("b"); 
      Expression<Func<string, bool>> exp2 = x => x.Contains("a"); 
      ParameterExpression param = exp.Parameters[0]; 
      Expression<Func<string, bool>> accumulator = Expression.Lambda<Func<string, bool>>(Expression.AndAlso(exp.Body, Expression.Invoke(exp2, param)), param); 
      var flag = accumulator.Compile()("ab"); 
      Console.WriteLine(flag); 

auch einen Blick über this haben.