при возрастании/убывании в LINQ - можно изменить порядок через параметр?

Вы можете сделать это с помощью списка инициализаторов:

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 });
73
задан Nathan W 23 December 2008 в 11:56
поделиться

2 ответа

Можно легко создать собственный дополнительный метод на 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);
113
ответ дан Marc Gravell 7 November 2019 в 07:59
поделиться

С точки зрения того, как это реализовано, это изменяется метод - от 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. Это только действительно полезно для числовых данных, но является развязным способом достигнуть того же результата.

41
ответ дан Marc Gravell 7 November 2019 в 07:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: