Potrzebuję uzyskać dwa pola z tabeli bazy danych (pobranej przy użyciu linq-sql), jedno pole to data-godzina (i jest stałym polem), a drugie jest zawsze dziesiętny, ale pole może być inne.Używanie wyrażenia Lambda do wybrania różnych pól z nazw pól
W tabeli znajdują się dane walutowe, które są przetwarzane dwa razy dziennie w różnych walutach, mogą więc zawierać pola takie jak AM_USD, PM_USD, AM_EUR itd. Muszę też uzyskać dane takie jak lista daty w odniesieniu do PM_USD lub data przeciwko AM_EUR.
Chciałbym móc wywołać dane za pomocą wyrażenia lambda na przykład (to jest okorowane przykład):
data = TableData.Select(x=>new {x.DateTimeAdded, x.[**field name as string**]});
staram się napisać funkcję, aby to zrobić, i jestem zawiodły.
Najbliższy I udało się:
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();
}
Które nie powiedzie się z "System.InvalidOperationException: Lambda parametr nie w zakres".
Jestem pewien, że pominąłem coś oczywistego lub podążałem w tym kierunku w niewłaściwy sposób.
Wszelkie pomysły?
Dzięki T
Czy można założyć, że nie można zmienić tak strasznego schematu danych? – Lazarus