2011-11-11 16 views

Respuesta

12

Algo como esto

Enumerable.Range(1,12) 
    .Select(o => new DateTime(DateTime.Today.Year, o, 1)) 
    .GroupBy(o => (o.Month - 1)/3) 
+0

¡Bien, me alegro de que puedas usar magia entera para hacer una solución para esto! – Jackstine

-1

Sí que se puede lograr con el LINQ a la función de SQL GroupBy si se define el qouters en algún lugar de su base de datos o puede escribir algún código que manejará esta acción, todo depende de los datos disponibles para esta evaluación.

3

se puede dividir una lista arbitraria en partes utilizando una sobrecarga del método Seleccionar y GroupBy. En su caso, suponiendo que los meses en la lista están en el orden correcto, el siguiente debería funcionar:

var groups = yourList 
    .Select((item, index) => new { item, index }) 
    .GroupBy(indexedItem=>indexedItem.index/3); 
+0

buen ejemplo, pero ¿y si sus meses no están en orden cronológico –

+0

@COLDTOLD: entonces la respuesta de liho1eye o de usted sería mejor: D puede – saus

5

Aquí hay un ejemplo básico que demuestra esto:

var dates = new[] 
        { 
         new DateTime(2011, 12, 25), 
         new DateTime(2011, 11, 25), 
         new DateTime(2011, 5, 4), 
         new DateTime(2011, 1, 3), 
         new DateTime(2011, 8, 9), 
         new DateTime(2011, 2, 14), 
         new DateTime(2011, 7, 4), 
         new DateTime(2011, 11, 11) 
        }; 

var groupedByQuarter = from date in dates 
         group date by (date.Month - 1)/3 
         into groupedDates 
         orderby groupedDates.Key 
         select groupedDates; 


foreach(var quarter in groupedByQuarter) 
{ 
    Console.WriteLine("Q: {0}, Dates: {1}", quarter.Key, string.Join(", ", quarter)); 
} 

El orden de está ahí para ayudar simplemente los cuartos deben ordenarse lógicamente Puede eliminar la cláusula completa siguiendo la declaración del grupo.

Con la salida de:

Q: 0, Dates: 1/3/2011 12:00:00 AM, 2/14/2011 12:00:00 AM 
Q: 1, Dates: 5/4/2011 12:00:00 AM 
Q: 2, Dates: 8/9/2011 12:00:00 AM, 7/4/2011 12:00:00 AM 
Q: 3, Dates: 12/25/2011 12:00:00 AM, 11/25/2011 12:00:00 AM, 11/11/2011 12:00:00 AM 

Obviamente que se necesitan para corregir los números trimestre mediante la adición de uno o tal vez traducirlos a otro enumeración correspondiente.