【发布时间】:2012-07-31 13:32:49
【问题描述】:
鉴于此代码:
public class PaginationModel<T> : BaseModel
{
public List<T> Rows { get; set; }
public PagingInfo PagingInfo { get; set; }
public void AddColumn<TProp>(Expression<Func<T, TProp>> column)
{
}
}
我希望能够使用代码
leadListOutputModel.AddColumn(x => x.DateCreated);
然后在我的 MVC 视图中循环遍历列集合并针对对象调用表达式,但是由于 TProp 是在方法调用中推断出来的,因此它似乎无法存储为通用字段,例如
private List<Expression<Func<T, TProp>>> columns = new List<Expression<Func<T, TProp>>>();
谁能想到一个不使用对象或失去一般好处的方法?
--- 编辑
我正在尝试做两件事,
首先,我将一个“SortBy”参数传递给我的控制器,它采用字符串属性的名称,当前通过 ((MemberExpression)expression).Member.Name 提取,其次我想使用 Func 在我的 MVC 视图中提取该字段的值。
原因是我正在制作一个分页网格,我希望在控制器中使用一个很好的语法来配置列,例如我给出的 AddColumn 示例。我想查看列以创建标题行,然后在我的模型集合中循环遍历这些列并针对它们调用 Func 以提取值。
【问题讨论】:
-
我会说
List<Expression<Func<T, object>>>,但您认为这会失去通用TProp的好处。你能详细说明一下吗?它有什么好处? -
回复:您的编辑:是的;我以前做过。您需要一组非泛型接口,以及由泛型 AddColumn 方法创建的泛型实现。
标签: c# linq generics collections expression