1

我想根据属性 Civic Number 的前两位数字对成员列表进行排序。如果搜索年份为 82,则所有市民编号以 82 开头的人都会留在返回的列表中。

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

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

我想写一个类似的方法,但关于公民号码。Civic Number 的长度为 10 位,数据类型为“long”。我知道这不起作用,但是很好,这里有一些东西:

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

最好的问候罗伯特贾尔维克

4

1 回答 1

1

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

_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允许随机访问(索引)的情况下完成:参见

于 2013-10-17T11:23:12.397 回答