Je dois obtenir deux champs d'une table de base de données (récupérée en utilisant linq-to-sql), un champ est un datetime (et est un champ fixe) et l'autre est toujours une décimale, mais le champ peut être différent.Utilisation de l'expression Lambda pour sélectionner différents champs des noms de champs
La table contient des données de devise qui sont traitées deux fois par jour et dans des devises différentes, telles que AM_USD, PM_USD, AM_EUR, etc. Et j'ai besoin de données telles qu'une liste de PM_USD ou la date contre AM_EUR.
Je voudrais être en mesure d'appeler les données en utilisant une expression lambda par exemple (ce qui est un dépouillé exemple):
data = TableData.Select(x=>new {x.DateTimeAdded, x.[**field name as string**]});
Je suis en train d'écrire une fonction pour ce faire, et je suis échouer lamentablement.
Le plus proche que je suis parvenu est:
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();
}
qui échoue avec "System.InvalidOperationException: Lambda Paramètre non portée". Je suis sûr que j'ai manqué quelque chose d'évident, ou que je me suis trompé.
Des idées?
Merci T
Est-il juste de supposer que vous ne pouvez pas modifier ce schéma terrible pour les données? – Lazarus