从通用存储库返回动态列表

时间:2014-04-10 08:02:14

标签: c# entity-framework generics dynamic repository-pattern

我的Generic Repository类中有一个方法,如下所示:

public List<T> GetPagedData(int startindex, int pagesize, string sorting, Func<T, T> selector = null)
{
    IQueryable<T> pageddata = dbset;
    pageddata = pageddata.OrderBy(sorting).Skip(startindex).Take(pagesize);

    if (selector != null)
        pageddata = pageddata.Select(selector).AsQueryable();

    return pageddata.ToList();
}

我希望能够从此方法返回动态/匿名类型列表。我尝试Func<T, dynamic>Expression<Func<T, dynamic>>并在这里和那里进行投射但是我总是遇到异常,即使它编译也是如此。请注意,我打算将其用作基于约定的,并且所有列名称都匹配。

我知道这可能看起来有点像,但任何帮助表示赞赏。如果我错了也请告诉我。

2 个答案:

答案 0 :(得分:0)

使用var

  public List<T> GetPagedData(int startindex, int pagesize, string sorting, Func<T, T>       
  selector = null)
 {
    var pageddata = dbset.OrderBy(sorting).Skip(startindex).Take(pagesize);

    if (selector != null)
       pageddata = pageddata.Select(selector).AsQueryable();

    return pageddata.ToList();
  }

答案 1 :(得分:0)

你可以使用2个Generics

public List<Q> GetPagedData<T, Q>(int startindex, int pagesize, string sorting, Func<T, Q> selector = null)
{
    dynamic pageddata = dbset;
    pageddata = pageddata.OrderBy(sorting).Skip(startindex).Take(pagesize);

    return pageddata.Select(selector).ToList();
}

没有选择器,这是不可能的。最小选择器将T的输入参数转换为Q.(除了T和Q是相同类型或Q扩展T,然后标识函数是最小选择器)