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: ,

posted @ Tuesday, August 14, 2012 9:18 AM

Print
Comments have been closed on this topic.
«July»
SunMonTueWedThuFriSat
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910