Linq在long类型中排序前两个数字

时间:2013-10-17 11:19:01

标签: c# linq

我想根据属性Civic Number的前两位对成员列表进行排序。 如果搜索年份为82,那么具有以82开头的思域号的每个人都将留在返回的列表中。

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

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

我想写一个类似的方法,但关于思域号。思域号码长10位,数据类型为“长”。我知道这不行,但是,这是:

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

祝你好运 Robert Jarlvik

1 个答案:

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