【发布时间】:2013-02-25 10:14:04
【问题描述】:
在我的基础存储库类中
我编写了这个函数,以便可以从数据库中检索已排序的数据集合。 T 是在类级别定义的泛型
public abstract class RepositoryBase<T>
where T : class
代码是这样的:
public IList<T> GetAll<TKey>(Expression<Func<T, bool>> whereCondition, Expression<Func<T, TKey>> sortCondition, bool sortDesc = false)
{
if (sortDesc)
return this.ObjectSet.Where(whereCondition).OrderByDescending(sortCondition).ToList<T>();
return this.ObjectSet.Where(whereCondition).OrderBy(sortCondition).ToList<T>() ;
}
我的目标是引入一个 generic 排序参数,以便我可以这样调用函数:
repo.GetAll (model=>model.field>0, model=>model.sortableField, true)
我的意思是我可以通过匿名函数直接指定排序字段,因此使用 Intellisense...
很遗憾,这个函数不起作用,因为最后一行代码在编译时会产生错误。
我也试过打电话:
repo.GetAll<Model> (model=>model.field>0, model=>model.sortableField, true)
但这不起作用。
我应该如何编写函数来实现我的目标?
我正在使用 EF 5、c#、.NET 4.5
【问题讨论】:
-
编译时错误是......? (任何时候您有错误,无论是编译时还是执行时,请在问题中包含它。不要让我们猜测。)
-
我认为应该是 Func<...> 而不是 Expression
> -
我完全被搞砸了。我的功能运行良好,但我用错误的 Where 条件调用它...我应该删除这个问题吗?无论如何@EliAlgranti,我从 .NET 教程中复制了 where 条件参数的模板。你能告诉我 Func<...> 和 Expression
> 之间的区别以及为什么 Func<...> 应该更好地工作吗? -
另外,在这里我刚刚发现了一个类似的问题,在这里他们也使用 Expression
> stackoverflow.com/questions/3828591/…
标签: linq entity-framework generics sql-order-by expression