繁体   English   中英

Linq表达式-从范围“”引用的类型为“ System.Data.DataRow”的“变量”,但未定义

[英]Linq expression - “variable” of type 'System.Data.DataRow' referenced from scope “” but it is not defined

我正在尝试在运行时使用datarow字段动态传递带有元组的lambda,以传递给linq groupby。 我收到从作用域“引用的类型为“ System.Data.DataRow”的异常“变量”,但未定义。

MethodInfo fieldMI = typeof(DataRowExtensions).GetMethod("Field",new Type[] { typeof(DataRow), typeof(DataColumn) }.MakeGenericMethod(typeof(string));
ParameterExpression fieldParameter = Expression.Parameter(typeof(DataRow));

Type[] parameterTypes = new Type[fields.Count];
MethodCallExpression[] methodCallExpressions = new MethodCallExpression[fields.Count];

for(int i = 0; i < fields.Count; i++) {
parameterTypes[i] = typeof(string);
Expression dataElement = Expression.Constant(dc[i], typeof(DataColumn));
methodCallExpressions[i] = Expression.Call(null, fieldMI, new Expression[] { fieldParameter, dataElement});
}
var tupleTypeDefinition = typeof(Tuple).Assembly.GetType("System.Tuple`" = fields.Count);
var tupleType = tupleTypeDefinition.MakeGenericType(parameterTypes);
var constructor = tupleType.GetConstructor(parameterTypes);
var param = Expression.Parameter(typeof(DataRow));
var body = Expression.New(constructor, methodCallExpressions);
var func = Expression.Lambda<Func<DataRow, object>>(body,param).Compile();

我终于弄清楚了-我创建了一个新的DataRow参数(参数),而不是使用以前创建的参数(fieldParameter)。 现在可以了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM