列出<class>字母顺序,同时保留某些项目在顶部?</class>

时间:2013-06-29 03:22:32

标签: c# .net-4.0

我有一个List<StreetSuffix>我希望按字母顺序排序,同时保持最常用的位置。

我的班级看起来像这样:

public class StreetSuffix
{
    public StreetSuffix(string suffix, string abbreviation, string abbreviation2 = null)
    {
        this.Suffix = suffix;
        this.Abbreviation = abbreviation;
        this.Abbreviation2 = abbreviation2;
    }

    public string Suffix { get; set; }
    public string Abbreviation { get; set; }
    public string Abbreviation2 { get; set; }
}

我知道我可以使用以下方式订购我的清单:

Suffix.OrderBy(x => x.Suffix)

此列表将用于从列表中的项目中提供combobox,我希望在同一订单的顶部保留以下后缀:

Road
Street
Way
Avenue

有没有办法使用LINQ执行此操作,还是我必须为此特定条目干预自己?

2 个答案:

答案 0 :(得分:4)

你可以这样做:

// Note: reverse order
var fixedOrder = new[] { "Avenue", "Way", "Street", "Road" };
Suffix.OrderByDescending(x => Array.IndexOf(fixedOrder, x.Suffix))
      .ThenBy(x => x.Suffix);

答案 1 :(得分:1)

使用OrderBy..(优先顺序) ThenBy..(二级订单)

或者,实现自定义IComparer并将其与OrderBy一起使用。主要排序将是外部条件。