LaVOZs

The World’s Largest Online Community for Developers

'; c# - Splice IEnumerable with Linq - LavOzs.Com

Is there an in-built way to splice an IEnumerable in Linq-To-Objects?

Something like:

List<string> options = new List<string>(); // Array of 20 strings
List<string> lastOptions = options.Splice(1, 5); // Gets me all strings 1 through 5 into a new list

Try:

List<string> options = new List<string>();
List<string> lastOptions = options.Skip(0).Take(5).ToList();

skip is used to show how to skip x elements (tnx drch)


You could create something like this: (extension method)

public static class SpliceExtension
{
    public static List<T> Splice<T>(this List<T> list, int offset, int count)
    {
        return list.Skip(offset).Take(count).ToList();
    }
}

But this will only be available to Lists.


You could also use it on IEnumerable<>

public static class SpliceExtension
{
    public static IEnumerable<T> Splice<T>(this IEnumerable<T> list, int offset, int count)
    {
        return list.Skip(offset).Take(count);
    }
}

This way the List isn't iterated completely.

use it like:

List<string> lastOptions = options.Splice(1, 5).ToList();

I like this way more, because it can be used on several linq queries.

Related
LINQ query on a DataTable
Dynamic LINQ OrderBy on IEnumerable<T> / IQueryable<T>
Deep cloning objects
Multiple “order by” in LINQ
LINQ's Distinct() on a particular property
Creating a comma separated list from IList<string> or IEnumerable<string>
Get int value from enum in C#
LEFT OUTER JOIN in LINQ
IEnumerable vs List - What to Use? How do they work?
Group by in LINQ