这是一个非常简短的问题,我担心答案也很短。
有没有办法按照
的方式做任何事情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编译查询是否可能?
答案 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;
}