using System.Collections.Generic;
public static void Main()
var As = Enumerable.Range(0,range).Select(i => new A { Name = "Name" + i, Number = seed.Next(range) }).ToList();
var Bs = Enumerable.Range(0,range).Select(i => new B { Place = "Place" + i, Number = seed.Next(range) }).ToList();
var abs = new Dictionary<int,List<Tuple<A,B>>>();
if(!abs.ContainsKey(a.Number))
abs[a.Number] = new List<Tuple<A,B>>();
abs[a.Number].Add(new Tuple<A,B>(a,null));
if(!abs.ContainsKey(b.Number))
abs[b.Number] = new List<Tuple<A,B>>();
abs[b.Number].Add(new Tuple<A,B>(null,b));
foreach(var lt in abs.OrderByDescending( k => k.Key ))
foreach(var tuple in lt.Value.Where(t => t.Item1 != null))
Console.WriteLine(a.Name + ", " + a.Number);
foreach(var tuple in lt.Value.Where(t => t.Item2 != null))
Console.WriteLine(b.Place + ", " + b.Number);
public string Name { get; set; }
public int Number { get; set; }
public string Place { get; set; }
public int Number { get; set; }