Hay una manera muy directa en su ejemplo:
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));
De esta manera, usted está pidiendo por el índice de País se encuentra en la cadena de secuencia. Solo tenga en cuenta que los elementos no encontrados serán -1, que también puede corregir si lo desea.
Si desea hacer algo más complejo, puede crear su propia implementación personalizada de clase IComparer
para comparar los elementos utilizando su orden personalizado. Esto puede pasarse a OrderBy.
Tal IComparer se vería así:
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));
}
}
y se puede llamar como:
var result = bb.OrderBy(x => x.Country, new SequenceComparer(new [] { "AR", "CL", "PY", "UY", "AUP" }));
De cualquier manera funciona bien, este último es agradable y reutilizable, pero el primero (usando IndexOf directamente) sigue siendo muy conciso también. Tu elección.
¿Puede sugerirme en cualquier lugar que pueda leer sobre esto? – Guillermo
@Guillermo: acabo de editar mi ejemplo, aunque de una manera muy directa usando Array.IndexOf() –
Genial, he sido muy útil – Guillermo