加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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)仍然非常简洁.你的选择.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读