【发布时间】:2013-04-27 04:49:17
【问题描述】:
我目前是第一次使用 ASP 动态数据,我正在尝试构建一个过滤器。我们的用户需要根据项目是否是选定父项的子项(我们的项可以有多个父项)来定位列表中的项。
所讨论的项目是 Segments,每个 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 中选择合适的 Route,然后我会检查 Segment 的 RouteIds 属性是否包含该 Route 的 Id。
关于如何使它工作的任何指针?
编辑 - 这是一个例外:
“System.Linq.Enumerable”类型上没有通用方法“包含” 与提供的类型参数和参数兼容。无类型 如果方法是非泛型的,则应提供参数。
【问题讨论】:
-
我可能已经完全错误地阅读了这个问题,但是您不能使用 LINQ 查询更简单地实现同样的目的吗? rapidprogramming.com/tutorial/…
-
@bUKaneer,SQL 可翻译的 LINQ 查询必须使用表达式树。有时您可以让编译器为您完成这项工作。其他时候(当您只知道运行时的符号时,如 OP 的示例:
this.Column.Name),您必须以困难的方式构建表达式树(如上)。 -
@SonnyBoy,你说“继续抛出异常”,但你没有告诉我们抛出了哪些异常。
-
抱歉!这是一个例外:“类型 'System.Linq.Enumerable' 上没有泛型方法 'Contains' 与提供的类型参数和参数兼容。如果方法是非泛型的,则不应提供类型参数。”
-
@Sonny,我想你可能忘记将可枚举本身作为第一个参数传递给
.Contains。
标签: c# asp.net dynamic-data linq-expressions asp.net-dynamic-data