В вашем примере есть очень прямой путь:
var sequence = new [] { "AR", "CL", "PY", "UY", "AUP" };
List<bbHeader> bb = new List<bbHeadher>();
// fill bb
// takes the item, checks the index of the country in the array
var result = bb.OrderBy(x => Array.IndexOf(sequence, x.Country));
Таким образом, вы упорядочиваете по индексу Страна, найденная в строке последовательности.Просто имейте в виду, что не найденные предметы будут иметь значение -1, которое вы также можете исправить, если хотите.
Если вы хотите сделать что-то более сложное, вы можете создать свой собственный класс IComparer
реализация для сравнения товаров с использованием вашего индивидуального заказа.Затем это может быть передано в OrderBy.
Такой IComparer будет выглядеть так:
public sealed class SequenceComparer : IComparer<string>
{
private string[] _sequence { get; set; }
public SequenceComparer(string[] sequence)
{
if (sequence == null) throw new ArgumentNullException("sequence");
_sequence = sequence;
}
public int Compare(string x, string y)
{
if (ReferenceEquals(x, y)) return 0;
return Array.IndexOf(_sequence, x).CompareTo(Array.IndexOf(_sequence, y));
}
}
И может быть вызван так:
var result = bb.OrderBy(x => x.Country, new SequenceComparer(new [] { "AR", "CL", "PY", "UY", "AUP" }));
В любом случае, хорошо работает,последний хорош и пригоден для повторного использования, но первый (использующий IndexOf напрямую) также очень лаконичен.Ваш выбор.