2015-10-16 12 views
5

Tôi đang cố gắng sử dụng mẫu mã tôi tìm thấy ở đây một cái gì đó tôi đang làm việc trên: How to convert a String to its equivalent LINQ Expression Tree?LINQ động ParseLambda không giải quyết

Trong các giải pháp tác giả sử dụng như sau:

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

Tuy nhiên, bất cứ khi nào tôi cố gắng sử dụng nó, nó không giải quyết được. Tôi nhận được một lỗi:

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

Tôi đã cài đặt gói NuGet Hệ thống LINQ động trong dự án này, tôi cũng đã thêm một tuyên bố sử dụng:

using System.Linq.Dynamic; 

Tuy nhiên, đó xuất hiện màu xám vì vậy tôi đoán nó không phải là chọn lên mà các đối tượng DynamicExpression tôi đề cập đến là từ đó, nó nhặt nó lên từ System.Linq.Expression thay thế. Có cách nào để sửa lỗi này? Tôi đã thử làm cho nó

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

nhưng vẫn không tốt, lỗi tương tự và câu lệnh sử dụng vẫn chuyển sang màu xám.

+0

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

+0

@PieterWitvoet bằng cách sử dụng mà tôi nhận được một lỗi 'System.Linq.Dynamic.DynamicExpression' là không thể truy cập do mức độ bảo vệ của nó – Paritosh

Trả lời

7

Các cụm

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

cả chứa DynamicExpression. Vì bạn cần cả hai loại này, bạn cần cung cấp bí danh cho System.Linq.Dynamic hoặc rõ ràng là System.Linq.Dynamic.DynamicExpression

Bạn cần đảm bảo rằng bạn cài đặt System.Linq.Dynamic bằng trình quản lý gói.

Một ví dụ làm việc tối thiểu là đầy đủ ở đây:

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

Nếu tôi làm điều gì đó như sử dụng myAlias ​​= System.Linq.Dynamic.DynamicExpression; Tôi gặp lỗi \t 'System.Linq.Dynamic.DynamicExpression' không thể truy cập được do mức bảo vệ – Paritosh

+0

bằng myAlias ​​= System.Linq.Dynamic; –

+0

và sử dụng nó như: myAlias.DynamicExpression.ParseLambda (new [] {p}, null, exp); –

Các vấn đề liên quan