类型'System.Dynamic.ExpandoObject'的表达式不能用于'System.Linq.IQueryable'类型的参数

时间:2018-02-14 03:56:09

标签: c#

我正在尝试为Access-Control-Request-Method: PUT创建Expression,以下是我的代码。

ExpandoObject

我在var parameter = Expression.Parameter(typeof(KeyValuePair<string, object>), "k"); var left = Expression.Property(parameter, "Key"); var right = Expression.Constant(prop, typeof(string)); var equal = Expression.Equal(left, right); var whereMethod = typeof(Queryable).GetMethods(BindingFlags.Public | BindingFlags.Static) .First(_ => _.Name == "Where").MakeGenericMethod(typeof(ExpandoObject)); propExp = Expression.Call(whereMethod, propExp, equal);

获得了例外
  

'System.Dynamic.ExpandoObject'类型的表达式不能用于'System.Linq.IQueryable`类型的参数

有人可以帮忙吗?

仙人

1 个答案:

答案 0 :(得分:1)

表达式期望System.Dynamic.ExpandoObject作为第一个参数,就像异常状态一样:

  

类型的表达式System.Dynamic.ExpandoObject&#39;不能用于   类型参数#System; Linq.IQueryable`

在这行代码中,您尝试将where linq转换为Expando对象:

var whereMethod = typeof(Queryable).GetMethods(BindingFlags.Public | BindingFlags.Static)
    .First(_ => _.Name == "Where").MakeGenericMethod(typeof(ExpandoObject));

但是你失败了,因为你有一个Iqueryable对象:

var whereMethod = typeof(可查询)

调整代码,使whereMethod变量成为动态expando对象,它将起作用。