gpt4 book ai didi

c# - 如何将 OrderBy 表达式数组传递给方法?

转载 作者:太空狗 更新时间:2023-10-29 20:22:07 27 4
gpt4 key购买 nike

我正在尝试增强我的存储库,以便它负责订购。我应用了 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一样工作,奖励积分和爱争论。

最佳答案

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> 替换签名,但是你不能将隐式类型的 lambdas 与隐式类型的元组一起使用(你也不能将它们与隐式表达式一起使用)所以然后,使用它时你的代码会很丑陋......

关于c# - 如何将 OrderBy 表达式数组传递给方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5047561/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com