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();
}
此致敬意罗伯特·雅尔维克
最简单、效率非常低的方法就是
_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
法