排序列表&lt;&gt; orderby list <string> count

时间:2016-08-14 12:53:23

标签: c#

我有一个像这样的列表

List<Category> list = Category.getCategoryList();

在类别类中,我有public List<string> subCat { get; set; },有些类别有subCat而有些类别没有,我想通过subCat订购我的列表。其中subCat的类别排在第一位。 我知道这将按catName排序

List<Category> SortedList = list.OrderBy(o => o.catName).ToList();

如何通过subCat对列表中的subCat进行排序。 任何帮助都是适当的。

2 个答案:

答案 0 :(得分:1)

您可以按子类别的计数进行排序,这样您将首先拥有包含更多子项的类别:

var sorted = list.OrderByDescending(o => o.subCat != null ? o.subCat.Count : 0).ToList();

如果您想按类别名称订购并首先显示带子类别的类别,您可以使用ThenBy

var sorted = list
                .OrderBy(o => o.subCat != null && o.subCat.Count > 0 ? 0 : 1)
                .ThenBy(o => o.catName)
                .ToList();

答案 1 :(得分:1)

如果要按子类别的存在进行排序,请使用Any方法排序谓词:

//will order by the boolean value - due to the descending first the "true" and then "false"
var result = OrderByDescending(item => item.SubCat.Any());

如果您想按总和类别的数量订购:

var result = OrderByDescending(item => item.SubCat.Count());

要按多个属性进行排序,请使用ThenBy