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?
InformationsquelleAutor Toby Bush | 2010-11-18
Schreibe einen Kommentar