Не строго используя linq для решения ваших проблем, но более краткий способ обработки итерации:
static void Main(string[] args)
{
int maxBatchSize = 3;
Dictionary<string, DateTime> secs = new Dictionary<string, DateTime>();
secs.Add("6571 JT", new DateTime(2011, 1, 10));
secs.Add("6572 JT", new DateTime(2011, 1, 12));
secs.Add("6573 JT", new DateTime(2011, 1, 12));
secs.Add("6574 JT", new DateTime(2011, 1, 12));
secs.Add("6575 JT", new DateTime(2011, 1, 10));
secs.Add("6576 JT", new DateTime(2011, 1, 11));
secs.Add("6577 JT", new DateTime(2011, 1, 11));
secs.Add("6578 JT", new DateTime(2011, 1, 11));
secs.Add("6574 JT", new DateTime(2011, 1, 11));
secs.Add("6579 JT", new DateTime(2011, 1, 11));
secs.Add("6580 JT", new DateTime(2011, 1, 11));
secs.Add("6581 JT", new DateTime(2011, 1, 11));
secs.Add("6582 JT", new DateTime(2011, 1, 11));
secs.Add("6583 JT", new DateTime(2011, 1, 11));
secs.OrderBy(o => o.Value).GroupBy(o => o.Value).ToList().ForEach(date =>
{
Console.Write("\nNew batch at {0} \n", date.Key);
int batchsize = 0;
foreach (var sec in date)
{
if (batchsize >= maxBatchSize)
{
Console.Write("\nNew batch at {0} \n", date.Key);
batchsize = 0;
}
Console.Write(" {0} {1} \n", sec.Key, sec.Value);
batchsize++;
}
});
Console.ReadLine();
}