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 ) ;
}
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uTGlucTsKCnB1YmxpYyBjbGFzcyBUZXN0CnsKCWNsYXNzIE1lZGlhCgl7CgkJcHVibGljIGludCBHYWxsZXJ5SWQgeyBnZXQ7IHNldDsgfQoJCXB1YmxpYyBzdHJpbmcgTmFtZSB7IGdldDsgc2V0OyB9CgkJcHVibGljIGludCBTb3J0T3JkZXIgeyBnZXQ7IHNldDsgfQoJfQoJCgljbGFzcyBHYWxsZXJ5Cgl7CgkJcHVibGljIGludCBHYWxsZXJ5SWQgeyBnZXQ7IHNldDsgfQoJCXB1YmxpYyBzdHJpbmcgTmFtZSB7IGdldDsgc2V0OyB9CgkJcHVibGljIGludCBTb3J0T3JkZXIgeyBnZXQ7IHNldDsgfQoJfQoJCglwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpCgl7CgkJR2FsbGVyeVtdIGdzID0gbmV3IEdhbGxlcnlbXSB7IG5ldyBHYWxsZXJ5IHsgR2FsbGVyeUlkID0gMCwgTmFtZSA9ICJnMCIsIFNvcnRPcmRlciA9IDEgfSwgbmV3IEdhbGxlcnkgeyBHYWxsZXJ5SWQgPSAxLCBOYW1lID0gImcxIiwgU29ydE9yZGVyID0gMCB9IH07CgkJTWVkaWFbXSBtcyA9IG5ldyBNZWRpYVtdIHsgbmV3IE1lZGlhIHsgR2FsbGVyeUlkID0gMCwgTmFtZSA9ICJtMCIsIFNvcnRPcmRlciA9IDF9LCBuZXcgTWVkaWEgeyBHYWxsZXJ5SWQgPSAwLCBOYW1lID0gIm0xIiwgU29ydE9yZGVyID0gMCB9LCBuZXcgTWVkaWEgeyBHYWxsZXJ5SWQgPSAxLCBOYW1lID0gIm0yIiB9IH07CgkJCgkJICAgIHZhciByZXN1bHQgPSBtcwogICAgICAgIC5PcmRlckJ5KG0gPT4gbS5Tb3J0T3JkZXIpCiAgICAgICAgLkdyb3VwQnkobSA9PiBtLkdhbGxlcnlJZCkKICAgICAgICAuSm9pbigKICAgICAgICAgICAgZ3MsIAogICAgICAgICAgICBncm91cCA9PiBncm91cC5LZXksCiAgICAgICAgICAgIGcgPT4gZy5HYWxsZXJ5SWQsCiAgICAgICAgICAgIChncm91cCwgZykgPT4gbmV3IHsgR2FsbGVyeSA9IGcsIE1lZGlhID0gZ3JvdXAgfSkKICAgICAgICAuT3JkZXJCeSh4ID0+IHguR2FsbGVyeS5Tb3J0T3JkZXIpOwogICAgICAgICAgICAKICAgICAgICBmb3JlYWNoICh2YXIgeCBpbiByZXN1bHQpCiAgICAgICAgewogICAgICAgIAlDb25zb2xlLldyaXRlTGluZSgiR2FsbGVyeTogIiArIHguR2FsbGVyeS5OYW1lKTsKICAgICAgICAJZm9yZWFjaCAodmFyIG0gaW4geC5NZWRpYSkKICAgICAgICAJewogICAgICAgIAkJQ29uc29sZS5Xcml0ZUxpbmUoIiBNZWRpYTogIiArIG0uTmFtZSk7CiAgICAgICAgCX0KICAgICAgICB9Cgl9Cn0=