我正在尝试增强我的存储库,因此它是负责订购的人。我已经应用了this question的答案,就存储库而言,我很确定它已经完成了。
我遇到的问题是我现在不确定如何将数组传递给存储库中的方法。编译器不停地向我大吼大叫代表们。在上面的链接问题中,作者基本上是在做我想要的,所以它必须是可能的。
这是我的存储库代码:
public virtual IList<TEntity> SelectOrderedList(
Expression<Func<TEntity, bool>>[] Orderers,
bool Ascending = true) {
IOrderedQueryable<TEntity> TemporaryQueryable = null;
foreach (Expression<Func<TEntity, bool>> Orderer in Orderers) {
if (TemporaryQueryable == null) {
TemporaryQueryable = (Ascending ? this.ObjectSet.OrderBy(Orderer) : this.ObjectSet.OrderByDescending(Orderer));
} else {
TemporaryQueryable = (Ascending ? TemporaryQueryable.ThenBy(Orderer) : TemporaryQueryable.ThenByDescending(Orderer));
};
};
return TemporaryQueryable.ToList();
}
另一方面,我并非100%确定我应该使用Expression<Func<TEntity, bool>>
。出于某种原因,我觉得它应该是Expression<Func<TEntity, int>>
,但我不太确定。
无论如何,如果有人能告诉我如何实际打电话,我真的很感激。如果你能使它像params
论证那样工作,那么奖励点和爱。
答案 0 :(得分:7)
public virtual IList<TEntity> SelectOrderedList(
params Expression<Func<TEntity, IComparable>>[] Orderers) {
IOrderedQueryable<TEntity> TemporaryQueryable = null;
foreach (Expression<Func<TEntity, IComparable>> Orderer in Orderers) {
if (TemporaryQueryable == null) {
TemporaryQueryable = this.ObjectSet.OrderBy(Orderer);
} else {
TemporaryQueryable = TemporaryQueryable.ThenBy(Orderer);
};
};
return TemporaryQueryable.ToList();
}
然后将其用作SelectOrderedList(o1 => (o1.Something), o2 => (o2.SomethingElse))
...
另外,为Descending写另一个:)
如果你想要一个,每个orderer可以升序或降序,用Tuple&gt;替换签名,SortDirection&gt;但你不能使用带有隐式类型元组的隐式类型lambd(并且你也不能将它们与隐式表达式一起使用)那么,使用它时你会有一个非常难看的代码...