Gup*_*R4c 7 c# linq lambda expression
我正在尝试增强我的存储库,因此它是负责订购的人.我已经应用了这个问题的答案,就存储库而言,我很确定它已经完成了.
我遇到的问题是我不知道如何将数组传递给存储库中的方法.编译器不停地向我大吼大叫代表们.在上面的链接问题中,作者基本上是在做我想要的,所以它必须是可能的.
这是我的存储库代码:
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();
}
Run Code Online (Sandbox Code Playgroud)
另外,我并不是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();
}
Run Code Online (Sandbox Code Playgroud)
那就把它用作SelectOrderedList(o1 => (o1.Something), o2 => (o2.SomethingElse))......
另外,为Descending写另一个:)
如果你想要一个,每个orderer可以升序或降序,用Tuple>,SortDirection>替换签名,但你不能使用带有隐式类型元组的隐式类型lambda(并且你也不能将它们与隐式表达式一起使用)那么,你' d使用它时有相当难看的代码......
| 归档时间: |
|
| 查看次数: |
2104 次 |
| 最近记录: |