4

我有一个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 来做到这一点,还是我必须为这个特定条目干预自己?

4

2 回答 2

4

你可以这样做:

// Note: reverse order
var fixedOrder = new[] { "Avenue", "Way", "Street", "Road" };
Suffix.OrderByDescending(x => Array.IndexOf(fixedOrder, x.Suffix))
      .ThenBy(x => x.Suffix);
于 2013-06-29T03:28:11.813 回答
1

使用OrderBy..(优先顺序)ThenBy..(次要顺序)

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

于 2013-06-29T03:28:04.800 回答