c# – 由Linq到SQL的特定顺序

前端之家收集整理的这篇文章主要介绍了c# – 由Linq到SQL的特定顺序前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
可以按照特定的顺序订购 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)仍然非常简洁.你的选择.

猜你在找的C#相关文章