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 @ martedì 14 agosto 2012 12:18

Print
Comments have been closed on this topic.
«ottobre»
domlunmarmergiovensab
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789