У меня большая/более сложная задача, но для простоты рассмотрим следующее:
Скажем, что у меня есть таблица в SQL DataBase, называемая Product, имеющая два столбца: ID (int, первичный ключ) и Имя (varchar/string). У меня также есть простой LINQ DataContext.
У меня есть запрос, построенный и переданный "моей" функции. Скажем, это что-то вроде: (хотя это может быть немного сложнее)
IQueryable<Product> query = from p in db.Products select p;
Как только мой метод получит этот запрос, переданный в качестве параметра, он должен изменить порядок сортировки, например.
IQueryable<Product> sortedQuery = query.OrderBy(x => x.Name);
Я хотел бы сделать это более общим, т.е. указать поле для сортировки. Обычно я могу сделать оператор switch
, который принимает строку. Однако я хотел бы знать, есть ли способ передать параметр напрямую. Я намерен распространить это на другие таблицы базы данных, поэтому эти операторы switch
будут утомительными.
Я пытался что-то вроде:
IQueryable<Product> sortedQuery = query.OrderBy(x => (typeof(Product)).GetProperty("Name"));
Но это не работает. Я также хочу обеспечить поддержку LINQ to SQL, то есть сортировку, которая будет выполняться на SQL Server. Следовательно, если я отлаживаю, я должен получить SQL-запрос из этого запроса LINQ.
Заранее благодарим вас за помощь.