If you imagine ordering your request as follows:
query = orderDict["Date"](query, true);
Then your dictionary should be defined as follows:
var orderDict = new Dictionary<string, Func<IQueryable<Auditing>, bool, IQueryable<Auditing>>>();
and you can add elements to it as follows:
orderDict.Add("Date", MakeOrderedQueryDelegate(a => a.RequestDateTime)); orderDict.Add("UserName", MakeOrderedQueryDelegate(a => a.CdUsername));
which requires MakeOrderedQueryDelegate:
private Func<IQueryable<Auditing>, bool, IQueryable<Auditing>> MakeOrderedQueryDelegate<T>(Expression<Func<Auditing, T>> keyselector) { return (q, descending) => { return MakeOrderedQuery(q, descending, keyselector); }; }
.. and you can implement MakeOrderedQuery as follows:
private IQueryable<Auditing> MakeOrderedQuery<T>(IQueryable<Auditing> query, bool descending, Expression<Func<Auditing, T>> keyselector) { if (descending) { return query.OrderByDescending(keyselector); } else { return query.OrderBy(keyselector); } }
Leon van der Walt
source share