Вы можете сделать это с помощью списка инициализаторов:
std::vector<unsigned int> array;
// First argument is an iterator to the element BEFORE which you will insert:
// In this case, you will insert before the end() iterator, which means appending value
// at the end of the vector.
array.insert(array.end(), { 1, 2, 3, 4, 5, 6 });
Можно легко создать собственный дополнительный метод на IEnumerable или IQueryable:
public static IOrderedEnumerable<TSource> OrderByWithDirection<TSource,TKey>
(this IEnumerable<TSource> source,
Func<TSource, TKey> keySelector,
bool descending)
{
return descending ? source.OrderByDescending(keySelector)
: source.OrderBy(keySelector);
}
public static IOrderedQueryable<TSource> OrderByWithDirection<TSource,TKey>
(this IQueryable<TSource> source,
Expression<Func<TSource, TKey>> keySelector,
bool descending)
{
return descending ? source.OrderByDescending(keySelector)
: source.OrderBy(keySelector);
}
Да, Вы теряете способность использовать выражение запроса здесь - но откровенно я не думаю, что Вы на самом деле извлекаете выгоду из выражения запроса так или иначе в этом случае. Выражения запроса являются большими для сложных вещей, но если Вы только делаете единственную операцию, более просто просто поместить ту одну операцию:
var query = dataList.OrderByWithDirection(x => x.Property, direction);
С точки зрения того, как это реализовано, это изменяется метод - от OrderBy/ThenBy до OrderByDescending/ThenByDescending. Однако можно применить вид отдельно к основному запросу...
var qry = from .... // or just dataList.AsEnumerable()/AsQueryable()
if(sortAscending) {
qry = qry.OrderBy(x=>x.Property);
} else {
qry = qry.OrderByDescending(x=>x.Property);
}
Какое-либо использование? Можно создать весь "порядок" динамично, но он более включен...
Другой прием (главным образом соответствующий LINQ к объектам) должен использовать множитель-1/1. Это только действительно полезно для числовых данных, но является развязным способом достигнуть того же результата.