Почему это недопустимое приведение LINQ?

Я поместил необработанные данные в общий список. Затем я помещаю данные, рассчитанные на основе этих необработанных данных, в другой общий список:

private List<ItemTotalsAcrossMonths> itemTotalsAcrossMonthsList;

Данные (как необработанные, так и рассчитанные) должны отображаться отсортированными, упорядоченными по итоговым закупкам, поэтому я хочу, чтобы данные сортировались таким образом. Поскольку упорядочение общего списка возвращает другой общий список, я сначала попытался переназначить отсортированные данные в исходный общий список:

itemTotalsAcrossMonthsList = (List<ItemTotalsAcrossMonths>)itemTotalsAcrossMonthsList.OrderByDescending(x => 
x.TotalPurchases13);

... но дорога, по которой я иду, очевидно, вымощена благими намерениями, потому что эта взрывная бомба взрывается у меня на лице:

введите описание изображения здесь

Я попытался поместить vals в отдельный общий список того же типа:

private List<ItemTotalsAcrossMonths> itemTotalsAcrossMonthsList;
private List<ItemTotalsAcrossMonths> itemTotalsAcrossMonthsListSortedByTotalPurchasesDescending;
. . .
itemTotalsAcrossMonthsListSortedByTotalPurchasesDescending = (List<ItemTotalsAcrossMonths>)itemTotalsAcrossMonthsList.OrderByDescending(x => x.TotalPurchases13);

... но результаты были очень похожи.

Что мне нужно сделать, чтобы отсортировать общий список?

3 ответа

Решение

Вы пропускаете вызов ToList().

Методы LINQ возвращают IEnumerable<T>не List<T>, так что вы не можете предполагать, что реализация интерфейса List<T>,

Ты можешь позвонить ToList() на запрос LINQ, чтобы получить список с результатами.

OrderByDescending возвращает OrderedEnumerable. Ваш тип List, Просто позвони ToList() после вашего OrderByDescending чтобы вернуться к вашему типу.

OrderByDescending Метод является методом LINQ. В общем, LINQ работает на IEnumerableс не Lists. Вам нужно создать список из IEnumerable с помощью ToList() метод:

itemTotalsAcrossMonthsList.OrderByDescending(x => x.TotalPurchases13).ToList();
Другие вопросы по тегам