Mit einer Lambda-Ausdruck zur Auswahl verschiedene Felder aus Feld-Namen
Ich brauche, um die zwei Felder aus einer Datenbank-Tabelle (abgerufen mithilfe von linq-to-sql), einem field-ist ein datetime (und ist ein fester Bereich) und der andere ist immer auch eine Dezimalzahl, aber das Feld kann unterschiedlich sein.
Die Tabelle enthält die Währung, die verarbeitet wird, zweimal am Tag und in verschiedenen Währungen, so könnten die Felder wie AM_USD, PM_USD, AM_EUR etc. Und ich brauche, um die Daten wie eine Liste der Frist gegen PM_USD oder das Datum gegen AM_EUR.
Ich würde gerne in der Lage, rufen Sie die Daten mit Hilfe einer lambda-Ausdruck zum Beispiel (dies ist eine abgespeckte Beispiel):
data = TableData.Select(x=>new {x.DateTimeAdded, x.[**field name as string**]});
Ich versuche eine Funktion schreiben, die dies tun, und bin scheitern kläglich.
Den nächsten ich habe es geschafft ist:
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();
}
Dem Fehler "System.InvalidOperationException: Lambda-Parameter, der nicht in scope".
Ich bin mir sicher, dass ich etwas fehlt offensichtlich, oder über Sie gehen falsche Weg.
Irgendwelche Ideen?
Dank
T
- Ist es fair, anzunehmen, dass Sie nicht ändern können, dass schreckliche-schema für die Daten?
Du musst angemeldet sein, um einen Kommentar abzugeben.
x.Foo
ist ein Mitglied vonx
(Eigenschaft oder ein Feld) und nicht mit einem parameter:data
? Dies funktioniert gut für mich:Ihre Frage:
Angabe der Feldnamen in eine LINQ-Abfrage als string kann man mit die LINQ Dynamic Query Library.
Und durch die Art und Weise, dachte das Frage ist nicht genau identisch, die Antwort ist so ziemlich das gleiche.