2015-10-16 22 views
5

Sto cercando di utilizzare il codice di esempio che ho trovato qui per qualcosa su cui sto lavorando: How to convert a String to its equivalent LINQ Expression Tree?Linq dinamica ParseLambda non risolvere

Nella soluzione l'autore usa la seguente:

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

Tuttavia, ogni volta che cerco di usarlo, non si risolve. Ottengo un errore:

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

ho installato il pacchetto NuGet sistema Linq dinamico nel progetto, ho anche aggiunto una dichiarazione utilizzando:

using System.Linq.Dynamic; 

tuttavia, che appare in grigio, quindi sono supponendo che non stia rilevando che l'oggetto DynamicExpression a cui mi riferisco è da lì, lo sta raccogliendo da System.Linq.Expression. C'è un modo per risolvere questo problema? Ho provato a renderlo

System.Linq.Dynamic.ParseLambda(new[] { p }, null, tagCondition); 

ma ancora non va bene, lo stesso errore e l'istruzione using è ancora in grigio.

+0

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

+0

@PieterWitvoet utilizzando che ottengo un errore 'System.Linq.Dynamic.DynamicExpression' è inaccessibile a causa del suo livello di protezione – Paritosh

risposta

7

I complessi

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

contengono entrambe DynamicExpression. Poiché è necessario entrambi, è necessario assegnare un alias a System.Linq.Dynamic o esplicitamente come System.Linq.Dynamic.DynamicExpression

È necessario assicurarsi di installare System.Linq.Dynamic utilizzando il gestore pacchetti.

Un esempio minimamente di lavoro completo è qui:

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

Se faccio qualcosa di simile a usare myAlias ​​= System.Linq.Dynamic.DynamicExpression; Viene visualizzato un errore \t 'System.Linq.Dynamic.DynamicExpression' è inaccessibile a causa del livello di protezione – Paritosh

+0

utilizzando myAlias ​​= System.Linq.Dynamic; –

+0

e usarlo come: myAlias.DynamicExpression.ParseLambda (new [] {p}, null, exp); –

Problemi correlati