2012-05-28 62 views
0

我有一个对象列表,需要从此列表中获取记录列表。就像我的国家,我需要获得国家名称为“澳大利亚”和国家“Indonasia”的国家名单,该名单将不会被分类。使用Linq在两条记录之间获取记录

正在使用c#。

我试图使用类似的东西,获取第一个和第二个索引,然后用它来获取带有for循环的列表,但如果可以在单个查询中完成则会很方便。

+1

你可以发布你目前正在使用的代码? – caesay

回答

4

如果你做到以下几点:

var elementsBetween = allElements 
     .SkipWhile(c => c.Name != "Australia") 
     .Skip(1) // otherwise we'd get Australia too 
     .TakeWhile(c => c.Name != "Indonasia"); 

,你会得到你想要的,而无需通过列表3次迭代的结果。

(这是假设你的国家如Country项目有Name字符串属性。)

请注意,这并不是在所有国家进行排序 - 你是否希望这个是从你的问题不清楚或没有,但它的在SkipWhile之前添加一个OrderBy

+0

即使没有linq,你也不需要浏览列表3次。你通常写什么样的循环? – caesay

+0

通常,当人们对LINQ使用索引或计数时,他们最终会遍历列表来查找所述索引或计数。 (OP专门发布了关于查找这两个项目的索引。)我会说“尤其是没有LINQ”,而不是“甚至没有LINQ” - LINQ使意外迭代更容易。 – Rawling

+0

我倾向于同意这一点。然而,你点燃我的一部分答案是当你说“没有**需要**来遍历列表3次”时。你不需要**遍历列表,如果你做**正确**有或没有LINQ。 – caesay

0

本应该做的工作

var query = data.SkipWhile(x => x != "Australia").TakeWhile(x => x != "Indonesia")