【发布时间】:2011-08-10 17:46:47
【问题描述】:
我正在尝试为这个 linq 查询构建一个表达式树:所以我可以传入一个通用实体:
this.EntityCollection.Select((ent) => ent.TimeStamp).Max()
我想创建一个类,它采用通用实体并找到其 TimeStamp 属性的最大值。
我正在尝试类似下面的东西,但它抱怨:
ParameterExpression param = Expression.Parameter(typeof(TE), "ent");
MemberExpression prop = Expression.
Property(param, typeof(TE).GetProperty("TimeStamp").GetGetMethod());
Expression<Func<TE, DateTime>> lambda = Expression.Lambda<Func<TE, DateTime>>(
prop, new ParameterExpression[] { param });
DateTime maxdate = this.EntityCollection.Select(lambda).Max();
当我编译时,我在最后一行代码中得到以下错误:
重载解析失败,因为无法访问“选择” 使用这些参数调用:
我做错了什么?
【问题讨论】:
-
“它抱怨”含糊不清。请告诉我们您收到的确切错误。 (另外,您可以给 Expression.Property 一个属性 name - 这比自己获取它更简单。)
-
在最后一行代码中出现错误“重载解析失败,因为无法使用这些参数调用可访问的 'Select':”
-
EntityCollection是什么类型,TE是什么? -
接受表达式树需要
IQueryable<T>。 -
如果你有有一个内存集合,你可以使用
lambda.Compile()。将其保留为IQueryable<T>的好处是在数据库中执行查询。
标签: c# .net linq entity-framework expression-trees