c# – 由Linq到SQL的特定顺序
发布时间:2020-12-15 04:03:17 所属栏目:百科 来源:网络整理
导读:可以按照特定的顺序订购 Linq吗? 就像是 ListbbHeader bb = new ListbbHeader();bb.OrderBy(x = x.Country.CompareTo(new string[]{"AR","CL","PY","UY","AUP"})); 这个想法是根据字符串的具体顺序对Country字段进行排序 解决方法 在你的例子中有一个很直接
可以按照特定的顺序订购
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)仍然非常简洁.你的选择. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |