特定的顺序由Linq到SQL
本文关键字:Linq SQL 顺序 | 更新日期: 2023-09-27 18:05:31
是否可以根据特定的订单在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", "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。
这样的比较器是这样的:
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)仍然非常简洁。你的选择。
你可以把你自己的委托传递给orderby函数,在这种情况下比较逻辑可以由你定义