Tôi cần lấy hai trường từ bảng cơ sở dữ liệu (được truy xuất bằng LINQ-to-sql), một trường là datetime (và là trường cố định) và trường kia luôn là một số thập phân, nhưng trường có thể khác nhau.Sử dụng biểu thức Lambda để chọn các trường khác nhau từ tên trường
Bảng giữ dữ liệu tiền tệ được xử lý hai lần một ngày và bằng các đơn vị tiền tệ khác nhau để có thể có các trường như AM_USD, PM_USD, AM_EUR v.v ... và tôi cần lấy dữ liệu như danh sách ngày chống lại PM_USD hoặc ngày chống lại AM_EUR.
Tôi muốn để có thể gọi là dữ liệu sử dụng một biểu thức lambda ví dụ (đây là một tước ra ví dụ):
data = TableData.Select(x=>new {x.DateTimeAdded, x.[**field name as string**]});
Tôi đã cố gắng để viết một chức năng để làm điều này, và tôi thất bại.
Gần nhất tôi đã được quản lý là:
private Func<TableData, KeyValuePair<DateTime, decimal>> CreateSelect(string FieldName)
{
var parameterExp = Expression.Parameter(typeof(TableData), "sel");
var dateParameter = Expression.Parameter(typeof(DateTime), "DateTimeAdded");
var fieldParameter = Expression.Parameter(typeof(decimal), FieldName);
ConstructorInfo constructorInfo = typeof(KeyValuePair<DateTime, decimal>).GetConstructor(new[] { typeof(DateTime), typeof(decimal) });
NewExpression constructExpression = Expression.New(constructorInfo, new ParameterExpression[] { dateParameter, fieldParameter});
var lambda = Expression.Lambda<Func<TableData, KeyValuePair<DateTime, decimal>>>(constructExpression, parameterExp);
return lambda.Compile();
}
nào không thành công với "System.InvalidOperationException: Lambda Parameter không trong phạm vi".
Tôi chắc chắn rằng tôi thiếu điều gì đó hiển nhiên hoặc đi sai đường.
Bất kỳ ý tưởng nào?
Cảm ơn T
Có công bằng để giả định rằng bạn không thể thay đổi lược đồ khủng khiếp đó cho dữ liệu không? – Lazarus