2017-01-06 217 views
3

在LINQ的幫助下,我需要根據條件從列表中獲取項目。爲此,它應該只考慮從(provided index - 3)項目提供索引(動態)。LINQ - 從特定索引開始從列表中獲取項目

例如,列表包含項目{1,3,5,7,9,11,13}。如果提供的索引是4,則應該考慮從索引2開始到索引4結束的總共三個索引。在這三個項目中,應該用條件來過濾它們 - 比如項目應該大於5.

結果應該是 - {7,9}

我試過是,這是錯誤的,我堅持:

list.Select(item => list.Select(index => item[index - 3] && item > 5).ToList()); 

回答

16

這聽起來像你只是想SkipTake,但具有Where過濾:

var query = list.Skip(index - 3) // Start at appropriate index 
       .Take(3)   // Only consider the next three values 
       .Where(x => x > 5); // Filter appropriately 

個人似乎有點奇怪,我認爲該指數將是年底點,而不是開始點,請注意。您可能想要查看其他代碼段是否會因改變而受益。

1

SkipTake另一種方法是,以包括Where條款

list.Where((x, i) => // x is the list item, i is its index 
    i > (index - 3) && i <= index && // index bounds 
    x > 5 // item condition 
) 

在項目索引對於你的項目的一個子範圍的具體要求,我會去與SkipTake ,但是如果您需要項目索引中更復雜的條件,則可以使用此Where過載。