检查Linq IQueryable是否已应用订单

时间:2013-07-17 10:28:21

标签: c# linq expression-trees

有没有办法找出IQueryable对象是否在其表达式树中应用了OrderBy?

我的方案是网格控件启用了分页,并按列进行排序。但是默认情况下没有应用排序,所以在这种情况下,Linq to SQL对行计数做了非常大的选择,所以在所有场景中我都需要提供一个order by,但是我应该只应用主键的默认顺序如果没有指定其他订单。

这可能吗?

1 个答案:

答案 0 :(得分:6)

您可以通过使用自定义ExpressionVisitor或您选择的任何递归遍历机制检查查询的表达式树来查找。

我觉得你的代码设计得不好。您可能只应存储订单已作为bool应用于某处的事实。也许您的应用程序的信息流需要重新架构。

通过这种检查方法,您将以一种黑客的方式恢复此信息。