Nếu có ai đó rất quen thuộc với không gian tên Linq.Dynamic, tôi có thể sử dụng một số trợ giúp - không thể tìm thấy bất kỳ tài nguyên độc lập nào trên internet.Thực thi DynamicExpression với các loại không xác định
Về cơ bản tôi đang sử dụng DynamicExpression.ParseLambda để tạo ra một biểu thức mà loại không biết đến lúc biên dịch,
public Expression GetExpression(Type t, List<QueryFilter> filters)
{
// pseudo code
// extracts a string representation of the query as 'expressionString'
return DynamicExpression.ParseLambda(t, typeof(Boolean), expressionString, values);
}
Trường hợp QueryFilter là:
public class QueryFilter
{
string propertyName;
ExpressionType operationType;
object value;
}
nào đại diện cho một nhị phân đơn giản chức năng như "Tuổi> 15" hoặc một cái gì đó.
Đây là cách chức năng 'GetExpression' hoạt động, cần 2 loại - một loại là kiểu đầu vào và loại đầu ra, và cuối cùng tạo ra những gì thường được tạo bằng đại biểu Func. Nó cũng lấy một chuỗi đại diện cho truy vấn và một đối tượng param [] của các giá trị, là 'expressionString' và 'values' ở trên, tương ứng.
Tuy nhiên, tôi gặp sự cố khi thực thi biểu thức động trong LINQ-to-SQL, sử dụng DataContext được tạo từ tệp SqlMetal (.dbmc).
DatabaseContext db = new DatabaseContext(connectionString);
var filter = DynamicExpressionBuilder.
GetExpression(typeof(SysEventLogT), sysEventFilters)
var query = db.SysEventLogT.Where(filter);
Tạo các lỗi sau,
System.Data.Linq.Table<DBReporting.Linq.Data.SysEventLogT>
không chứa một định nghĩa cho 'ở đâu' và phần mở rộng phương pháp quá tải tốt nhất
System.Linq.Dynamic.DynamicQueryable.Where<T>(System.Linq.IQueryable<T>, string, params object[])
có một số đối số không hợp lệ.
Tôi biết rằng trường hợp DataContext của tôi thực sự xử lý các bảng sql là thuộc tính ... tôi có cần phản ánh với GetProperty() bằng cách nào đó để làm việc này không? Hoặc có lẽ tôi cần phải tạo một phần mở rộng khác.