【发布时间】:2019-01-10 12:18:52
【问题描述】:
我正在构建一个 Spec Evaluator,它必须考虑多个可能的 OrderBy,如下例所示:
if (spec.Order != null)
{
var count = spec.Order.Count;
if (count == 1)
{
query = query.OrderBy(spec.Order[0]);
}
else if (count == 2)
{
query = query.OrderBy(spec.Order[0])
.ThenBy(spec.Order[1]);
}
else if (count == 3)
{
query = query.OrderBy(spec.Order[0])
.ThenBy(spec.Order[1])
.ThenBy(spec.Order[2]);
}
// And so on...
}
Query是一个IQueryable,spec.Order是一个子句列表:List<Expression<Func<T, object>>>。
我知道我可以使用 OrderBy 并将所有子句作为字符串传递。而且我想我可以将所有Order 子句投影到一个以逗号分隔的新字符串。但该解决方案似乎并不干净。
有没有其他方法可以为Order 列表中的每一项动态生成一个新的ThenBy,高于1?
【问题讨论】:
-
spec.Order的类型到底是什么? -
@Dai 是子句列表
List<Expression<Func<T, object>>> -
你为什么不创建一个扩展方法并链接你的调用:stackoverflow.com/questions/13497255/…
-
@PraneetNadkar 我正在寻找完全相反的情况,这就是我使用规范模式的原因。