如何改变IQueryable的OrderBy方向

时间:2017-03-03 13:54:06

标签: c# sql-order-by iqueryable

我有一些函数(X)通过“OrderBy(x => x.Name)”返回IQueryable。 我想在新代码中使用X函数,但在此代码中有一个参数确定顺序(asc / desc)。

我不想改变(X),因为它已在多个地方使用过。

有获取X()的选项,然后取消它的“OrderBy”,并应用新订单?

(现在它抛出异常,因为它就像Y.OrderBy(a => a.Name).OrderByDescending(a => a.Name))

“列表中的列已被多次指定。列表中的列必须是唯一的。\ r \ n语句无法准备。”

2 个答案:

答案 0 :(得分:1)

使用

public void x(string order = string.empty)
{
  Y.OrderBy(a => a.Name);
  if (order == "desc")
  {
    Y = Y.Reverse();
  }
}

答案 1 :(得分:0)

我试图摆弄你的方法实际返回的IOrderedQueryable的Expression对象(我​​错了吗?)但是到目前为止没有运气,我看不到操作System.Linq.Expression或System.Linq的选项.EnumerableQuery很容易使用它而不是改变X()方法。

恕我直言,你应该选择:

  • 使用Reverse()(@Eric Lizotte答案)或OrderByDescending()创建一些包装方法 - 我猜测它会耗费更少的时间,但是对于分组,过滤等,你将不得不创建全新的功能。 / LI>
  • 从X()函数体中删除OrderBy()并修改旧代码 - 返回非有序结果将为您提供更多灵活性和机会,可以通过每个方案中的linq表达式对结果执行所需操作我会遇到的。

如果您正在谈论“功能”,您能否为您澄清一下您在应用程序中通过ORM(例如实体框架)映射的sql函数,或者只是使用自定义提供程序的普通方法返回IQueryable?