Giả sử tôi có một cái gì đó giống nhưTừ BinaryExpression để Expression <Func <T, bool>>
Expression<Func<SomeType, DateTime>> left = x => x.SomeDateProperty;
Expression<Func<SomeType, DateTime>> right = x => dateTimeConstant;
var binaryExpression = Expression.GreaterThan(left, right);
Expression<Func<SomeType, bool>> predicate =
x => x.SomeDateProperty> dateTimeConstant;
1) Làm thế nào tôi có thể thay thế bên hữu sự phân công của dòng cuối cùng với một cái gì đó mà sử dụng binaryExpression
để thay thế? var predicate = x => binaryExpression;
không hoạt động.
2) right
luôn là hằng số, không nhất thiết là DateTime.Now. Nó có thể thuộc loại đơn giản hơn Expression
không? Ví dụ, nó không phụ thuộc vào SomeType, nó chỉ là một hằng số.
3) Nếu tôi có GreaterThan
là string
, có cách nào để lấy từ chuỗi này đến phương thức có cùng tên trong Expression
không? Nói chung, nếu tên của phương pháp so sánh được đưa ra là string
, làm cách nào tôi có thể đi từ chuỗi để thực sự gọi phương thức có cùng tên trên lớp Expression
?
Nó phải hoạt động với LINQ to Entities, nếu nó quan trọng.
Bạn có thể thay đổi cây biểu thức bằng cách sử dụng lớp ExpressionVisitor. – Steven