我正在尝试增强我的存储库,以便它负责订购。我已经应用了来自的答案这个问题就存储库而言,我很确定它已经完成了。
我遇到的问题是我不确定现在如何将数组传递给存储库中的方法。编译器一直对我大喊关于委托的事。在上面的链接问题中,作者本质上是在做我想做的事情,所以它一定是可能的。
这是我的存储库代码:
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
争论。
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))
...
另外,再写一个降序:)
如果您想要一个,其中每个排序者可以升序或降序,请将签名替换为 Tuple>,SortDirection> 但您不能将隐式类型的 lambda 与隐式类型的元组一起使用(并且您也不能将它们与隐式表达式一起使用),那么,您'使用它时会有一个相当丑陋的代码......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)