2015-11-06 80 views
1

我有了這個LINQ從一個泛型列表獲取特定類成員的不同值:如何在LINQ(C#)中對不同的val進行排序?

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’接受 類型的第一個參數」字符串」可以找到(是否缺少using指令或程序 集引用?)

我怎樣才能在不同的值按字母順序排序?

回答

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>

相關問題