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.
«dicembre»
domlunmarmergiovensab
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234