fork download
  1. using static System.Console;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4.  
  5. public class Program {
  6. public static void Main() {
  7. var listaObj1 = new List<Objeto1>();
  8. var listaObj2 = new List<Objeto2>();
  9. var listaObj3 = new List<Objeto3>();
  10. listaObj3.Add(new Objeto3 { PropObj3 = 1 });
  11. listaObj3.Add(new Objeto3 { PropObj3 = 0 });
  12. listaObj2.Add(new Objeto2 { PropObj2 = listaObj3 });
  13. listaObj2.Add(new Objeto2 { PropObj2 = listaObj3 });
  14. listaObj1.Add(new Objeto1 { PropObj1 = listaObj2 });
  15. listaObj1.Add(new Objeto1 { PropObj1 = listaObj2 });
  16.  
  17. var resultado = listaObj1.SelectMany(o => o.PropObj1, (objeto1, objeto2) => new { objeto1, objeto2 })
  18. .SelectMany(o => o.objeto2.PropObj2, (objeto2, objeto3) => new { objeto2, objeto3 })
  19. .Where(o => o.objeto3.PropObj3 == 1).Select(o => new { o.objeto2.objeto1.PropObj1 }).ToList();
  20. foreach(var i in resultado) {
  21. WriteLine(i);
  22. }
  23. }
  24. }
  25.  
  26. public class Objeto1 {
  27. public List<Objeto2> PropObj1 {get; set;}
  28. }
  29.  
  30. public class Objeto2 {
  31. public List<Objeto3> PropObj2 {get; set;}
  32. }
  33.  
  34. public class Objeto3 {
  35. public int PropObj3 {get; set;}
  36. }
  37.  
  38. //https://pt.stackoverflow.com/q/80066/101
Success #stdin #stdout 0.02s 17540KB
stdin
Standard input is empty
stdout
{ PropObj1 = System.Collections.Generic.List`1[Objeto2] }
{ PropObj1 = System.Collections.Generic.List`1[Objeto2] }
{ PropObj1 = System.Collections.Generic.List`1[Objeto2] }
{ PropObj1 = System.Collections.Generic.List`1[Objeto2] }