我想回想起来这可能是显而易见的,但我发现我很难理解这一点。
基本上我只想使用LINQ to Objects从一系列具有姓氏属性的对象中进行选择,这两个姓氏之间的姓氏按字母顺序排列,例如在列表中:
Adams Bentham Bickford Gillies Kelly Moore Peters Rutherford Smith Taylor Williams
如果您从“Kelly”中选择“Smith”,它将返回:
Kelly Moore Peters Rutherford Smith
以下。
它必须足够具体,以至于一个人选择Kelly to Smith并且之前有一个Kellerman和一个Smythe之后查询会将这些留下来,所以LIKE'K%'和LIKE'S%'是不好。此外,你必须通过k和s之间的所有字母才能到达那里。
我可能只是愚蠢地将问题提交给谷歌,但似乎没有其他人有这种字母关注。希望有人可以提供帮助。
编辑:到目前为止,这么好的人。但这是一个脑力劳动者。我们想要设置返回的最大记录数。例如,如果我们要求Bickford给Rutheerford最多3个,我们应该回来:
Bickford Gillies Kelly
目前我们只是随机获得球门柱之间的三个名字。
有什么想法吗?
答案 0 :(得分:3)
我认为你正在寻找类似的东西
static IEnumerable<string> GetNames(IEnumerable<string> originalList, string fromName, string toName)
{
foreach (string name in originalList)
{
if (name.CompareTo(fromName) >= 0 && name.CompareTo(toName) <= 0)
yield return name;
}
}
或LINQ版
static IEnumerable<string> GetNames(IEnumerable<string> originalList, string fromName, string toName)
{
var query = from name in originalList
where name.CompareTo(fromName) >= 0 && name.CompareTo(toName) <= 0
select name;
return query;
}
用于生成Kelly to Smith包含列表的示例用法
string[] surnames = { "Adams", "Bentham", "Bickford", "Gillies", "Kelly", "Moore", "Peters", "Rutherford", "Smith", "Taylor", "Williams" };
foreach (string name in GetNames(surnames, "Kelly", "Smith"))
Console.WriteLine(name);
答案 1 :(得分:1)
怎么样:
var results = Users
.OrderBy(x => x.Surname)
.SkipWhile(x => x.Surname.CompareTo("Kelly") < 0)
.TakeWhile(x => x.Surname.CompareTo("Smith") <= 0);
答案 2 :(得分:0)
我认为应该这样做:
var Names = SourceList.OrderBy(x => x.SurName).Select(x => x.SurName >= "Kelly")
.Select(x => x.SurName <= "Smith").ToList();
我可能错了。这一切还是新的。
答案 3 :(得分:0)
像
这样的东西names
.Where(n => n.surname.CompareTo(fromName) >= 0)
.Where(n => n.surname.CompateTo(toName) <= 0)
答案 4 :(得分:0)
public IEnumerable<UserListItem> GetFilteredUsers(String start, String end)
{
var Users = from u in User.GetUsers()
let firstLetter = Char.ToUpper(u.FirstName[0])
let startLetter = Char.ToUpper(start[0])
let endLetter = Char.ToUpper(end[0])
where firstLetter >= startLetter && firstLetter <= endLetter
orderby u.FirstName
select u;
}