MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Sử dụng biến chuỗi trong biểu thức lambda LINQ

(Đây là bản gốc được cung cấp trước khi nhận ra rằng phản ánh sẽ không hữu ích trong trường hợp cụ thể này. Xem chỉnh sửa bên dưới để biết câu trả lời được cập nhật)

Nếu bạn không ngại sử dụng phản chiếu, bạn có thể làm:

var data = db.Single<Demo>(d => "value" == (string)typeof(Demo).GetProperty(propname).GetValue(d));

CHỈNH SỬA

Như những người khác đã gợi ý trong các nhận xét, để làm cho điều này hoạt động với MongoDB, bạn sẽ phải xây dựng biểu thức "bằng tay".

Vì vậy, nếu tôi thực hiện câu lệnh sau:

var data = db.Single<Demo>(d => d.prop1 == "value");

Tôi tin rằng những điều sau đây phải tương đương, nhưng xây dựng biểu thức lambda bằng tay:

string propname = "prop1"; // you can now change this to any valid property name.

var parameterExpresion = Expression.Parameter(typeof(Demo), "d");
var binaryExpression = Expression.Equal(
    Expression.Property(parameterExpresion, propname),
    Expression.Constant("value"));
var lambda = Expression.Lambda<Func<Demo, bool>>(binaryExpression, parameterExpresion);

var data = db.Single<Demo>(lambda);

... ngoại trừ việc bây giờ, bạn có thể thay đổi giá trị của propname đến bất kỳ tên thuộc tính hợp lệ nào và nó sẽ hoạt động.

Nhìn vào độ dài của mã khi xây dựng lambdas theo cách thủ công thực sự giúp tôi đánh giá cao tất cả những điều kỳ diệu của trình biên dịch xảy ra mà chúng tôi không bao giờ nhận ra.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Tôi cần truy xuất đối tượng MongoDB chỉ với mục mảng của bộ lọc

  2. Truy vấn không thành công với mã lỗi 13 và thông báo lỗi 'không được phép trên [db] để thực thi lệnh {find:

  3. Bắt đầu với Node.js, angle.js và MongoDB, lập mô hình quan hệ và các mẹo tăng cường khác

  4. MongoDB $ reverseArray

  5. mongo db tổng hợp kết quả ngẫu nhiên (xáo trộn)