LINQ – Divisione in parti di lunghe liste

In alcune applicazioni devo mandare verso i servizi grosse quantità di dati da elaborare e aumentare il timeout dei servizi non è cosa carina. Confused smile

Fossero delle applicazioni in uso a degli utenti avrei pensato di passare ad una gestione asincrona delle chiamate, ma essendo delle applicazioni che girano “unattended” ho cercato una soluzione più facile.

Ho pensato di dividere gli array da mandare al server in sotto-liste più piccole e LINQ e i suoi Extension Methods mi sono venuti in aiuto.

 

    static class LinqExtensions
    {
        public static IEnumerable<IEnumerable<T>> SplitByPartsCount<T>(this IEnumerable<T> list, int partsCount)
        {
            int i = 0;
            var splits = from item in list
                         group item by i++ % partsCount into part
                         select part.AsEnumerable();
            return splits;
        }

        public static IEnumerable<IEnumerable<T>> SplitByElementsCount<T>(this IEnumerable<T> list, int elementsCount)
        {

            var pos = 0;
            while (list.Skip(pos).Any())
            {
                yield return list.Skip(pos).Take(elementsCount);
                pos += elementsCount;
            }
        }
    }

Con queste due funzioni è possibile dividere una lista in un certo numero di parti o di indicare il numero di elementi desiderati di ogni lista. Se avete dei nomi migliori per le funzioni mandatemele pure Winking smile

L’ispirazione è venuta da qui e qui.

Technorati Tags: ,
«August»
SunMonTueWedThuFriSat
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678