我目前第一次使用 ASP 动态数据,并尝试构建一个过滤器。我们的用户需要根据项目是否是所选父项的子项(我们的项目可以有多个父项)来定位列表中的项目。
所讨论的项目是 Segment,每个 Segment 都有一个名为 RouteIds 的属性,其类型为 IEnumerable,它是该 Segment 的所有父 Id 的集合。
我已经在过滤器中重写了 GetQueryable 方法,但我不断在显示的最后一行中抛出异常:
ConstantExpression ce = Expression.Constant(int.Parse(this.ddlRouteNames.SelectedValue));
ParameterExpression pe = Expression.Parameter(source.ElementType);
MemberExpression me = Expression.Property(pe, this.Column.Name);
var callExpression = Expression.Call(typeof(Enumerable), "Contains", new Type[] { me.Type }, ce, me);
我的想法是,用户将从 DropDownList 中选择适当的路由,然后检查该段的 RouteIds 属性是否包含该路由的 Id。
有关如何使其正常工作的任何指示?
编辑 - 这是例外:
类型“System.Linq.Enumerable”上没有通用方法“Contains”
与提供的类型参数和参数兼容。无类型
如果方法是非泛型的,则应提供参数。
您的代码中有两个问题:
- 你的参数是倒退的。第一个参数必须是集合,第二个参数必须是您要搜索的项目。
- 你的类型参数是
IEnumerable<int>
,当它应该只是int
.
所以,固定代码是:
var callExpression = Expression.Call(
typeof(Enumerable), "Contains", new[] { typeof(int) }, me, ce);
但看起来你的表达的所有部分实际上并不是动态的,所以也许像下面这样的东西也可以工作:
Expression<Func<Segment, bool>> expression =
s => s.RouteIds.Contains(int.Parse(this.ddlRouteNames.SelectedValue));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)