Вы можете сделать что-то более общее в выборе свойств, но определенно о типе, который вы выбираете, в вашем случае «Заказ»:
записывать вашу функцию как общую:
public List<Order> GetOrderList<T>(IEnumerable<Order> orders, Func<Order, T> propertySelector)
{
return (from order in orders
orderby propertySelector(order)
select order).ToList();
}
, а затем использовать его следующим образом:
var ordersOrderedByDate = GetOrderList(orders, x => x.OrderDate);
Вы можете быть еще более общим и определить открытый тип для того, что вы хотите заказать:
public List<T> OrderBy<T,P>(IEnumerable<T> collection, Func<T,P> propertySelector)
{
return (from item in collection
orderby propertySelector(item)
select item).ToList();
}
и использовать его таким же образом:
var ordersOrderedByDate = OrderBy(orders, x => x.OrderDate);
Какой глупый ненужный сложный способ сделать стиль LINQ «OrderBy», но он может дать вам представление о том, как он может быть реализован в общий способ
Порядок столбцов должен соответствовать порядку, в котором столбцы запрашиваются позже, или MySQL не будет их использовать. Это вопрос, о котором вам следует подумать.
Подробнее здесь .
UPDATE:
Возможно, ваш вопрос о мощности прочитайте этот . Это похоже на ваш вопрос? Ответит ли он на это?
Всегда ставьте наиболее избирательный столбец в начале, редко возникает причина для другого.
или, может быть, это зависит от того, оптимизирую ли я скорость или пространство?
blockquote>Позвольте мне сказать так. В чем смысл использования меньшего хранилища, если он вызывает индекс
not to be used at all
? Индекс низкой мощности (в порядке столбцов) обычно не используется, если он не является индексом покрытия для запроса, потому что будет очень дорого вернуться к данным для других столбцов.точка индексов заключается в том, чтобы помочь запросу и иметь их в правильном порядке (мощность) всегда должно быть первым и самым важным соображением.
WHERE person_id = 123 AND country_code = 'AT'
Использовать
INDEX(person_id, country_code) -- in EITHER order!
Разница no в скорости или пробела для порядка столбцов индекса в этот случай.
Да, у MyISAM было «сжатие индекса», но оно больше не используется.
. Кардинальность имеет значение только для сравнения отдельных индексов, а не для упорядочения столбцов в составной индекс. То есть
INDEX(person_id) -- is better than
INDEX(country_code)
Но ни один из них не так хорош, как составной индекс.
Для
WHERE person_name LIKE 'James%' AND country_code = 'UK'
лучшим индексом является
INDEX(country_code, person_name) -- in THIS order!
Порядок в WHERE
не влияет на оптимизацию.
Дополнительные советы и обсуждение: http://mysql.rjweb.org/doc.php/index_cookbook_mysql