2015-11-06 27 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>

相关问题