c# - Nested classes lists LINQ -
i have following classes:
public class serializeddelegate { public list<goentry> goentries = new list<goentry>(); } public class goentry { public string go; public list<mbentry> mbentries = new list<mbentry>(); } public class mbentry { public string mb; public list<methodentry> methodsentries = new list<methodentry>(); } public class methodentry { public string method; }
and data:
var sd = new serializeddelegate(); var ego1 = new goentry { go = "player1" }; var ego2 = new goentry { go = "player2" }; var emb1 = new mbentry { mb = "mb1" }; var emb2 = new mbentry { mb = "mb2" }; var em1 = new methodentry { method = "target1" }; var em2 = new methodentry { method = "target2" }; var em3 = new methodentry { method = "target3" }; var em4 = new methodentry { method = "target4" }; emb1.methodsentries.add(em1); emb1.methodsentries.add(em2); emb2.methodsentries.add(em3); emb2.methodsentries.add(em4); ego1.mbentries.addrange(new[] { emb1, emb2 }); ego2.mbentries.add(emb1); sd.goentries.addrange(new[] { ego1, ego2 });
what i'm trying - print them in following form:
player1: mb1.target1 player1: mb1.target2 player1: mb2.target3 player1: mb2.target4 player2: mb1.target1 player2: mb1.target2
i have printed them using foreach loops:
foreach (var goentry in sd.goentries) { foreach (var mbentry in goentry.mbentries) { foreach (var methodentry in mbentry.methodsentries) console.writeline(goentry.go + ": " + mbentry.mb + "." + methodentry.method); } }
but want in linq way - want construct linq structure corresponds how want print them - need 1 foreach loop (so length of constructed enumerable number of total methods - in case, 6).
i started - no idea how proceed further:
var entries = sd.goentries .select(g => new { go = g.go, mbs = g.mbentries, methods = g.mbentries.selectmany(e => e.methodsentries) });
eventually, method entries in popup - that's why need structure, through out tell mbentry
belongs goentry
, , methodentry
belongs mbentry
.
sorry if wasn't clear enough - if that's case, please so.
thanks.
var entries = goentry in sd.goentries mbentry in goentry.mbentries methodentry in mbentry.methodsentries select new { goentry.go, mbentry.mb, methodentry.method };
you can output entries way:
foreach(var entry in entries) console.writeline("{0}: {1}.{2}", entry.go, entry.mb, entry.method);
Comments
Post a Comment