C# Select IEnumerable of matching elements including and excluding end points

C# Select IEnumerable of matching elements including and excluding end points

I wanted to be able to select sequential elements from a list based on a specified predicate. I needed to be able to include or exclude the begin and end elements as well. Here is how I made use of Linqs skipWhile and takeWhile extensions to do this:

Selecting matching elements, including the start and end points:


var matchingObjects = container.ListObjects()
.SkipWhile(s => !s.Key.Equals(startingObject.Key))
.TakeWhile(s => !s.Key.Equals(endingObject.Key))
.ToList();

//now find the end point and include it
matchingObjects.AddRange(container.ListObjects()
.SkipWhile(s => !s.Key.Equals(endingObject.Key)).Take(1)
.ToList());

return matchingObjects;

Selecting matching elements, not including the start and end points:

container.ListObjects()
.SkipWhile(s => !s.Key.Equals(startingObject.Key)).Skip(1)
.TakeWhile(s => !s.Key.Equals(endingObject.Key)).ToList();

I was having some trouble achieving the including end points version with one line, so I resorted to adding the last item as a separate call. I am sure there is a more elegant way to do this, so any feedback there is welcome from you Linq gurus 🙂

thanks,

Brent

By | 2014-01-22T16:14:46+00:00 January 22nd, 2014|Categories: C#, Handy Tools/Utilities|0 Comments

About the Author:

Leave A Comment