我需要从数据库表中获取两个字段(使用linq-to-sql检索),一个字段是日期时间(并且是固定字段),另一个字段始终是小数,但字段可以不同.
该表包含每天处理两次且以不同货币处理的货币数据,因此可能包含AM_USD,PM_USD,AM_EUR等字段.我需要获取数据,例如针对PM_USD的日期列表或针对AM_EUR的日期.
我希望能够使用lambda表达式调用数据(例如,这是一个剥离的示例):
data = TableData.Select(x=>new {x.DateTimeAdded, x.[**field name as string**]});
Run Code Online (Sandbox Code Playgroud)
我一直试图写一个函数来做到这一点,并且失败了.
我管理的最接近的是:
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();
}
Run Code Online (Sandbox Code Playgroud)
其中"System.InvalidOperationException:Lambda参数不在范围内"失败.
我确定我错过了一些明显的东西,或者错误的方式.
有任何想法吗?
谢谢T