2015-10-16 11 views
5

Próbuję użyć przykładowego kodu znalazłem tutaj na coś pracuję nad: How to convert a String to its equivalent LINQ Expression Tree?LINQ dynamiczne ParseLambda nie rozwiązywania

W rozwiązaniu autor wykorzystuje następujące:

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

Jednak gdy próbuję go użyć, nie rozwiązuje. I pojawia się błąd:

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

zainstalowałem pakiet Nuget systemu LINQ dynamiczny projektu Dodałem także using oświadczenie:

using System.Linq.Dynamic; 

jednak, że pojawi się na szaro, więc jestem zgaduję, że nie wykryto, że obiekt DynamicExpression, do którego się odnawiam, jest z tego miejsca, pobiera go z System.Linq.Expression. Czy istnieje sposób, aby to naprawić? Próbowałem już to zrobić, ale nadal nie jest dobrze, ten sam błąd, a instrukcja using nadal jest wyszarzona.

+0

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

+0

@PieterWitvoet, przy użyciu którego otrzymuję błąd "System.Linq.Dynamic.DynamicExpression" jest niedostępne ze względu na poziom ochrony – Paritosh

Odpowiedz

7

Zespoły

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

oba zawierają DynamicExpression. Ponieważ potrzebujesz obu tych metod, musisz podać alias do System.Linq.Dynamic lub jednoznacznie jako System.Linq.Dynamic.DynamicExpression

Musisz się upewnić, że zainstalowałeś System.Linq.Dynamic przy użyciu menedżera pakietów.

pełny przykład minimalnie pracy jest tutaj:

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

Jeśli zrobić coś jak przy użyciu myAlias ​​= System.Linq.Dynamic.DynamicExpression; Wystąpił błąd \t "System.Linq.Dynamic.DynamicExpression" jest niedostępny ze względu na poziom ochrony – Paritosh

+0

przy użyciu myAlias ​​= System.Linq.Dynamic; –

+0

i użyj go jak: myAlias.DynamicExpression.ParseLambda (new [] {p}, null, exp); –

Powiązane problemy