using System; using System.Linq; public class Test { class Media { public int GalleryId { get; set; } public string Name { get; set; } public int SortOrder { get; set; } } class Gallery { public int GalleryId { get; set; } public string Name { get; set; } public int SortOrder { get; set; } } public static void Main() { Gallery[] gs = new Gallery[] { new Gallery { GalleryId = 0, Name = "g0", SortOrder = 1 }, new Gallery { GalleryId = 1, Name = "g1", SortOrder = 0 } }; Media[] ms = new Media[] { new Media { GalleryId = 0, Name = "m0", SortOrder = 1}, new Media { GalleryId = 0, Name = "m1", SortOrder = 0 }, new Media { GalleryId = 1, Name = "m2" } }; var result = ms .OrderBy(m => m.SortOrder) .GroupBy(m => m.GalleryId) .Join( gs, group => group.Key, g => g.GalleryId, (group, g) => new { Gallery = g, Media = group }) .OrderBy(x => x.Gallery.SortOrder); foreach (var x in result) { Console.WriteLine("Gallery: " + x.Gallery.Name); foreach (var m in x.Media) { Console.WriteLine(" Media: " + m.Name); } } } }