Necesito obtener dos campos de una tabla de base de datos (recuperada usando linq-to-sql), un campo es una fecha y un campo fijo y el otro siempre un decimal, pero el campo puede ser diferente.Usando Lambda Expression para seleccionar campos diferentes de los nombres de campo
La tabla contiene datos de divisas que se procesan dos veces al día y en diferentes monedas, por lo que podría tener campos como AM_USD, PM_USD, AM_EUR, etc. Y necesito obtener datos como una fecha de PM_USD o la fecha contra AM_EUR.
Me gustaría ser capaz de llamar a los datos usando una expresión lambda, por ejemplo (esto es un despojado ejemplo):
data = TableData.Select(x=>new {x.DateTimeAdded, x.[**field name as string**]});
he estado tratando de escribir una función para hacer esto, y estoy fallando tristemente
El más cercano que he conseguido es:
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();
}
Qué falla con "System.InvalidOperationException: Lambda parámetro no alcance".
Estoy seguro de que me falta algo obvio, o lo estoy haciendo mal.
¿Alguna idea?
Gracias T
¿Es justo suponer que no puede alterar ese terrible esquema para los datos? – Lazarus