Можно создать дубликат:
Declaring func<in T,Out Result> dynamicallyсловарь Linq выражения
Я пытаюсь построить запрос, используя LINQ-to-SQL, а для того, чтобы обеспечить возможности сортировки, я написал что-то вроде этого:
private Dictionary<string, Expression<Func<DataAccess.Auditing, object>>> OrderDict { get; set; }
OrderDict = new Dictionary<string,Expression<Func<Augeos.GereonWeb.DataAccess.Auditing, object>>>();
OrderDict.Add("Date", p => (DateTime)p.RequestDateTime);
OrderDict.Add("Username", p => (string)p.CdUsername);
OrderDict.Add("Portfolio", p => (string)p.CdPortfolio);
OrderDict.Add("Url", p => (string)p.RequestedUrl);
OrderDict.Add("Result", p => (bool)p.RequestResult);
OrderDict.Add("Duration", p => (float)p.RequestDuration);
private IQueryable<DataAccess.Auditing> SetOrder(string orderBy, bool orderDirection, IQueryable<DataAccess.Auditing> query)
{
if (orderDirection)
return query.OrderByDescending(OrderDict[orderBy]);
else
return query.OrderBy(OrderDict[orderBy]);
}
Моя цель - использовать функцию SortOrder для сортировки запроса. Основная проблема заключается в том, что Func возвращает объект, а linq не может сортировать элементы этого типа. Мне действительно нужно использовать объект как возвращаемый тип, потому что мне приходится сортировать по широкому кругу типов. Возможно ли немного изменить этот код и заставить его работать?
Спасибо,
Gio