【发布时间】:2011-06-30 04:09:29
【问题描述】:
我正在尝试增强我的存储库,以便它负责订购。我已经应用了来自 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 参数一样工作,那么奖励积分和爱。
【问题讨论】:
-
Re the bool/int/etc - 这是被比较的 member 的类型。所以对于字符串属性,它是字符串。
-
不要传递 Exp
>[],而是传递 IOrderer [](将第二个 Type 参数排除在外)stackoverflow.com/questions/225481/…跨度> -
@David,虽然我喜欢你的建议,但我不确定如何实施它,而且你在链接问题中的回答并没有真正给我一个对我有意义的解决方案。在一天结束时,我想做类似的事情:
SelectOrderedList(o1 => (o1.Something), o2 => (o2.SomethingElse))。所以我想将多个表达式传递给该方法,以便它们可以执行 OrderBy/ThenBy...
标签: c# linq lambda expression