可以按照特定的顺序订购
Linq吗?
就像是
就像是
List<bbHeader> bb = new List<bbHeader>(); bb.OrderBy(x => x.Country.CompareTo(new string[]{"AR","CL","PY","UY","AUP"}));
这个想法是根据字符串的具体顺序对Country字段进行排序
解决方法
在你的例子中有一个很直接的方法:
var sequence = new [] { "AR","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","AUP" }));
无论哪种方式都很好,后者很好,可重用,但前者(直接使用IndexOf)仍然非常简洁.你的选择.