LINQ CompiledQuery.Compile和动态排序?

时间:2009-06-16 16:55:51

标签: .net sql linq

这是一个非常简短的问题,我担心答案也很短。

有没有办法按照

的方式做任何事情
Func<DataContext, string, bool, IEnumerable<X> fnMyQuery = CompiledQuery.Compile<DataContext, string, bool IList<X>(
     (db, sortColumn, sortDesc) => (
          (!sortDesc)?
              db.OrderBy(x => DynamicResolve(sortColumn))
          :
              db.OrderByDescending(x => DynamicReolve(sortColumn))
      ));

以另一种方式说,我想创建一个可以接受列和排序顺序的编译查询,然后以所需的方式对结果进行排序 - 我可以在没有查询的情况下找出如何执行此操作编译 - 但是使用LINQ to SQL编译查询是否可能?

2 个答案:

答案 0 :(得分:1)

我知道解决这个问题的唯一方法是编译两个查询。每个排序顺序一个,然后用一个委托给正确编译查询的帮助程序包装它。

答案 1 :(得分:0)

CompiledQuery.Compile的目的是生成一个完全翻译且随时可用的方法来评估查询。

完全翻译。

当然,没有什么能阻止你在数据库之外进行排序(源可能是编译查询)。

public IList<T> SortedResults<T>(IEnumerable<T> source,
  string sortColumn, bool sortDesc)
{
  List<T> results = source.ToList();
  if (!sortDesc)
  {
    results = Enumerable
      .OrderBy(results, x => DynamicResolve(sortColumn))
      .ToList();
  }
  else
  {
    results = Enumerable
      .OrderByDescending(results, x => DynamicResolve(sortColumn))
      .ToList();
  }
  return results;

}