2017-01-06 1 views
3

Mit Hilfe von LINQ muss ich Elemente aus einer Liste basierend auf einer Bedingung abrufen. Dazu sollte man nur Elemente von (provided index - 3) zum bereitgestellten Index berücksichtigen (dynamisch).LINQ - Abrufen von Elementen aus der Liste, beginnend mit dem spezifischen Index

Zum Beispiel enthält eine Liste Artikel {1,3,5,7,9,11,13}. Wenn der angegebene Index 4 ist, sollte er insgesamt drei Indizes berücksichtigen, beginnend bei Index 2 bis endend bei Index 4. Unter diesen drei Elementen sollte er mit einer Bedingung gefiltert werden - z. B. Artikel sollte größer als 5 sein.

das Ergebnis sollte sein - {7,9}

Was ich versucht, das ist falsch und ich stecke:

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

Antwort

16

Es klingt wie Sie nur eine Mischung aus Skip und Take wollen, Filterung mit 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 

persönlich scheint es ein wenig zu mir merkwürdig, dass der Index eher der Ende Punkt sein würde als der Start Punkt, wohlgemerkt. Vielleicht möchten Sie sehen, ob andere Code-Teile davon profitieren würden.

1

Eine Alternative zu Skip und Take wäre das Element Index in der Where Klausel

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

Für Sie mit einem einzigen Teilbereich der Elemente spezifische Anforderung aufzunehmen, ich mit dem Skip gehen würde und Take Wenn Sie jedoch eine komplexere Bedingung für den Artikelindex benötigen, können Sie diese Where Überladung verwenden.

Verwandte Themen