Мне нужно получить два поля из таблицы базы данных (полученной с помощью linq-to-sql), одно поле представляет собой дату и время (и является фиксированным полем), а другое всегда является десятичным, но поле может быть другим.
Таблица содержит данные о валюте, которые обрабатываются два раза в день и в разных валютах, поэтому могут иметь такие поля, как AM_USD, PM_USD, AM_EUR и т. д. И мне нужно получить такие данные, как список дат по отношению к PM_USD или дату по отношению к AM_EUR.
Я хотел бы иметь возможность вызывать данные, например, с помощью лямбда-выражения (это урезанный пример):
data = TableData.Select(x=>new {x.DateTimeAdded, x.[**field name as string**]});
Я пытался написать функцию для этого, и я терплю неудачу.
Самое близкое, что мне удалось:
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();
}
Что не удается с «System.InvalidOperationException: параметр Lambda не входит в область действия».
Я уверен, что упускаю что-то очевидное или делаю это неправильно.
Есть идеи?
Спасибо Т