2013-11-20 36 views
3

我有一个集合,其中每个元素都有一个名为IsTop的属性。我想要做的是使用linq(如果可能)在IsTop == true的第一次出现之后选择所有内容。现在,我这样做是这样的:如何在第一次出现后选择列表中的所有内容?

bool[] foundTop = {false}; // use array for modified closure 
foreach (var config in fullHierarchy 
    .Where(config => config.IsTop || foundTop[0])) 
{ 
    foundTop[0] = true; 
    configurationHierarchy.Add(config); 
} 

我觉得这是有点做作。有没有更简单的方法在LINQ中实现这一点?

+0

你说*在第一次出现top *之后,那么你如何确定你的收藏中的订购? – Yuck

+0

从数据库中读取数据时,将在数据源中处理该顺序。 – Sinaesthetic

回答

12

您可以使用这样的事情:

var afterTop = fullHierarchy.SkipWhile(x => !x.IsTop).Skip(1); 

SkipWhile跳过到第一个项目的所有元素被发现,其中IsTop == true,那么Skip跳过该元素了。结果将在fullHierarchy之后的所有项目之后的第一个IsTop == true

5

试试这个:

var result = fullHierarchy.SkipWhile(x=>!x.IsTop).Skip(1); 
4

我认为SkipWhile是你要找的东西,例如

var myArray = new[] 
{ 
    new { IsTop = false, S = 'a' }, 
    new { IsTop = true, S = 'b' }, 
    new { IsTop = false, S = 'c' }, 
}; 
myArray.SkipWhile(x => !x.IsTop); // contains the elements with 'b' and 'c' 

// in your code, might be 
foreach (var config in fullHierarchy.SkipWhile(x => !x.IsTop)) 
{ 
    configurationHierarchy.Add(config); 
} 
相关问题