2013-11-20 69 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); 
} 
相關問題