C# 列表<;类别>;按字母顺序排列,同时将某些项目保留在顶部?

C# 列表<;类别>;按字母顺序排列,同时将某些项目保留在顶部?,c#,.net-4.0,C#,.net 4.0,我有一个列表,我想按字母顺序排列,同时在顶部保留最常用的 我的班级是这样的: public class StreetSuffix { public StreetSuffix(string suffix, string abbreviation, string abbreviation2 = null) { this.Suffix = suffix; this.Abbreviation = abbreviation; this.Abb

我有一个
列表
,我想按字母顺序排列,同时在顶部保留最常用的

我的班级是这样的:

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)
此列表将用于输入一个
组合框
,从列表中的项目中,我希望将以下后缀保留在同一顺序的顶部:

Road
Street
Way
Avenue
是否有一种方法可以使用LINQ执行此操作,或者我必须亲自干预此特定条目?

使用(优先级顺序)(次级顺序)

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

您可以执行以下操作:

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

fixedOrder
没有只需要一个参数的
IndexOf
。@Prix-oops,应该非常感谢,这非常简洁,我所做的是排序+从结果中删除这些条目并合并顶部的新数组。您已经删除了您。试图提供一个答案。Linq是不合适的,看看这个简单的循环:(
道具
是你的
列表
)@TimSchmelter很感激,但这就是我正在做的事情,虽然略有不同,但大致相同,我只是想看看我是否可以将其纳入Linq。你需求的连续部分使得每个Linq方法都很困难,可读性和可维护性较差,可能比简单的循环方法效率更低。