gpt4 book ai didi

linq - ERROR 静态方法需要空实例,非静态方法需要非空实例

转载 作者:行者123 更新时间:2023-12-04 11:29:11 25 4
gpt4 key购买 nike

我正在尝试创建一个表达式树。我需要从数据表中读取数据并检查其列。要检查的列以及要检查的列数仅在运行时已知。列名作为字符串数组提供给我,并且每列都有一个要检查的字符串列表。我尝试了示例表达式树,如下所示。

在这里,我遇到了一个错误。

静态方法需要空实例,非静态方法需要非空实例。
参数名称:实例


在线

内部 = Expression.Call(rowexp,mi, colexp);

请帮帮我!!!

IQueryable<DataRow> queryableData = CapacityTable
.AsEnumerable()
.AsQueryable()
.Where(row2 => values.Contains(row2.Field<string>("Head1").ToString())
&& values.Contains(row2.Field<string>("Head2").ToString()));

MethodInfo mi = typeof(DataRowExtensions).GetMethod(
"Field",
new Type[] { typeof(DataRow),typeof(string) });

mi = mi.MakeGenericMethod(typeof(string));

ParameterExpression rowexp = Expression.Parameter(typeof(DataRow), "row");
ParameterExpression valuesexp = Expression.Parameter(typeof(List<string>), "values");
ParameterExpression fexp = Expression.Parameter(typeof(List<string>), "types");
Expression inner, outer, predicateBody = null;

foreach (var col in types)
{
// DataRow row = CapacityTable.Rows[1];

ParameterExpression colexp = Expression.Parameter(typeof(string), "col");
// Expression left = Expression.Call(pe, typeof(string).GetMethod("ToLower", System.Type.EmptyTypes));

inner = Expression.Call(rowexp,mi, colexp);
outer = Expression.Call(valuesexp, typeof(List<string>).GetMethod("Contains"), inner);
predicateBody = Expression.And(predicateBody,outer);
}

MethodCallExpression whereCallExpression = Expression.Call(
typeof(Queryable),
"Where",
new Type[] { queryableData.ElementType },
queryableData.Expression,
Expression.Lambda<Func<DataRow,bool>>(predicateBody, new ParameterExpression[] { rowexp }));

最佳答案

这意味着您试图表示的方法调用是静态的,但您给它一个目标表达式。这就像尝试调用:

Thread t = new Thread(...);
// Invalid!
t.Sleep(1000);

您正在尝试以表达式树形式执行此操作,这也是不允许的。

看起来 Field 正在发生这种情况 DataRowExtensions 上的扩展方法- 所以扩展方法的“目标”需要表示为调用的第一个参数,因为你实际上想要调用:
DataRowExtensions.Field<T>(row, col);

所以你要:
inner = Expression.Call(mi, rowexp, colexp);

那会叫 this overload这是调用带有两个参数的静态方法的方法。

关于linq - ERROR 静态方法需要空实例,非静态方法需要非空实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7857451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com