2015-11-06 7 views
1

Я получил это LINQ, чтобы получить различные значения конкретного члена класса из общего списка:Как я могу сортировать отдельные vals в LINQ (C#)?

var distinctDescriptions = itemsForMonthYearList.Select(x => x.ItemDescription).Distinct(); 

Общий список определяется следующим образом:

List<ItemsForMonthYear> itemsForMonthYearList; 

Класс:

public class ItemsForMonthYear 
{ 
    public String ItemDescription { get; set; } 
    public String monthYr { get; set; } 
    public int TotalPackages { get; set; } 
    public Decimal TotalPurchases { get; set; } 
    public Decimal AveragePrice { get; set; } 
    public Double PercentOfTotal { get; set; } 
} 

Я думал, что это будет работать:

var distinctDescriptions = itemsForMonthYearList.Select(x => x.ItemDescription).Distinct().OrderBy(x => x.ItemDescription); 

... но она даже не компилировать:

"„строка“не содержит определение для„ItemDescription“и без метода расширения„ItemDescription“принимать первый аргумент типа ' строка»может быть найдено (вы пропали без вести с помощью директивы или ссылка сборку?)"

Как я могу сортировать различные значения в алфавитном порядке?

ответ

5

Проблема заключается в том, вы уже проектируется свойство ItemDescription так это IEnumerable<String> сейчас, так что вам просто нужно заказать по его пункты: -

var distinctDescriptions = itemsForMonthYearList.Select(x => x.ItemDescription) 
               .Distinct() 
               .OrderBy(x => x); 
1

Вы проектируете только одно свойство типа string, так, результатом является коллекция string. Попробуйте это:

var distinctDescriptions = itemsForMonthYearList.Select(x => x.ItemDescription).Distinct().OrderBy(x => x); 
1

Как уже уже упоминалось, ваши Select проецирует собственности в коллекцию строк, а строки не имеют ItemDescription свойство, так что вы не можете приказать это.

Вместо этого, вы можете следовать советам из this answer:

Преобразовать коллекцию Select возврата в список, а затем отсортировать это.

var distinctDescriptions = itemsForMonthYearList.Select(x => x.ItemDescription).Distinct().ToList(); 
distinctDescriptions.Sort(); 

Это вернет List<string> в отсортированном виде.

 Смежные вопросы

  • Нет связанных вопросов^_^