Linq 对长字体中的前两个数字进行排序

本文关键字:两个 数字 排序 字体 Linq | 更新日期: 2023-09-27 18:35:42

我想根据属性公民号码的前两位数字对成员列表进行排序。如果搜索年份为 82,则公民号码以 82 开头的每个人都将保留在返回的列表中。

这是我编写的一种方法,返回相对于名称中第一个字母的排序列表。

private static List<Member> GetNameList(string searchString) 
{
    return _sortMemberList.Where(x => x.FirstName.ToLower().StartsWith(searchString.ToLower())).ToList();
}

我想写一个模拟方法,但关于公民号码。公民号码的长度为 10 位数字,数据类型为"long"。我知道这行不通,但好吧,这里有一些东西:

private static List<Member> GetMonthList(int searchYear)
{
    return _sortMemberList.OrderBy(x => x.CivicNumber > searchYear).ToList();
}

此致敬意罗伯特·雅尔维克

Linq 对长字体中的前两个数字进行排序

最简单、效率非常低的方法就是

_sortMemberList.Where(x => x.CivicNumber.ToString().StartsWith(searchYear.ToString())).ToList()

否则,你可以做

_sortMemberList.Where(x => (x.CivicNumber/100000000) == searchYear ).ToList()

假设您知道所有数字确实是 10 位,并且searchYear始终是 2 位

如果列表排序,则可以使其更高效:

_sortMemberList
     .SkipWhile(x => x.CivicNumber < searchYear*100000000 )
     .TakeWhile(x => (x.CivicNumber/100000000) == searchYear )
     .ToList()

更有效的是使用二进制搜索来定位目标年份的下限,但这只有在_sortMemberList允许随机访问(索引)的情况下才能完成:请参阅

  • LINQ 是否可以在订购集合时使用二叉搜索?
  • List<T>.BinarySearch