2015-10-16 18 views
5

Ich versuche, den Beispielcode zu verwenden, die ich hier etwas gefunden ich arbeite: How to convert a String to its equivalent LINQ Expression Tree?Linq Dynamische ParseLambda nicht lösen

In der Lösung verwendet der Autor folgendes:

var e = DynamicExpression.ParseLambda(new[] { p }, null, exp); 

Jedoch, wenn ich versuche, es zu benutzen, löst es nicht auf. Ich erhalte eine Fehlermeldung:

System.Linq.Expressions.DynamicExpression' does not contain a definition for 'ParseLambda'

ich das System Linq Dynamische nuget Paket im Projekt installiert, Außerdem habe ich eine using-Anweisung:

using System.Linq.Dynamic; 

jedoch, die so ausgegraut erscheint ich bin Ich rate nicht, dass das DynamicExpression-Objekt, auf das ich mich beziehe, von dort stammt, sondern stattdessen von System.Linq.Expression. Gibt es eine Möglichkeit, das zu beheben? Ich habe versucht, es

aber immer noch nicht gut, der gleiche Fehler und die Verwendung der Anweisung ist immer noch ausgegraut.

+0

'System.Linq.Dynamic.DynamicExpression.ParseLambda (...)'? –

+0

@PieterWitvoet mit dem ich bekomme einen Fehler 'System.Linq.Dynamic.DynamicExpression' ist nicht zugänglich aufgrund seiner Schutzstufe – Paritosh

Antwort

7

Die Baugruppen

System.Linq.Dynamic; 
System.Linq.Expressions; 

enthalten beide DynamicExpression. Da Sie beide benötigen, müssen Sie entweder oder explizit System.Linq.Dynamic.DynamicExpression

einen Alias ​​geben. Sie müssen sicherstellen, dass Sie System.Linq.Dynamic mit dem Paketmanager installieren.

Ein vollständiges minimal Arbeitsbeispiel ist hier:

using System.Linq.Expressions; 
using myAlias = System.Linq.Dynamic; 

namespace ConsoleApplication11 
{ 
    public class Foo 
    { 
     public string Bar { get; set; } 
    } 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      var expression = @"(Foo.Bar == ""barbar"")"; 
      var p = Expression.Parameter(typeof(Foo), "Foo"); 
      var e = myAlias.DynamicExpression.ParseLambda(new[] { p }, null, expression); 

      var test1 = new Foo() 
      { 
       Bar = "notbarbar", 

      }; 

      var test2 = new Foo() 
      { 
       Bar = "barbar" 
      }; 

      // false 
      var result1 = e.Compile().DynamicInvoke(test1); 

      // true 
      var result2 = e.Compile().DynamicInvoke(test2); 
     } 
    } 
} 
+0

Wenn ich etwas wie die Verwendung von myAlias ​​= System.Linq.Dynamic.DynamicExpression; Ich erhalte einen Fehler \t "System.Linq.Dynamic.DynamicExpression" ist aufgrund seiner Schutzstufe – Paritosh

+0

mit myAlias ​​= System.Linq.Dynamic nicht erreichbar; –

+0

und verwenden Sie es wie: myAlias.DynamicExpression.ParseLambda (new [] {p}, null, exp); –