Мне нужно получить два поля из таблицы базы данных (с помощью 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 параметр не входят в комплект".
Уверен, что я пропустил что-то очевидное или поступил неправильно.
Любые идеи?
Благодаря T
Справедливо ли считать, что вы не можете изменить эту страшную схему для данных? – Lazarus