using System.Collections.Generic;
public static void Main()
List<string> emails = new List<string>()
"patricksmith@domain2.com",
"erick.brown@domain3.com",
"steeve.burn@domain4.com",
var q = emails.GroupBy(m => m.Split('@')[1]).Select(g => new List<string>(g)).Interleave();
public static class Extensions
public static IEnumerable<T> Interleave<T>(this IEnumerable<IEnumerable<T>> source)
var queues = source.Select(x => new Queue<T>(x)).ToList();
while (queues.Any(x => x.Any()))
foreach (var queue in queues.Where(x => x.Any()))
yield return queue.Dequeue();