using System.Collections.Generic;
public override string ToString()
return string.Format("Id={0},Name={1}", Id, Name);
public static void Main()
var sampleData = new List<A>{new A{Data = new List<B>{new B{Data = new C{Data = new List<E>{new E{Id = 1, Name = "John Smith"}, new E{Id = 1, Name = "Fred Daniel"}, }}}}}};
Console.WriteLine("Test 1");
var getOneId = GetEById(1, sampleData);
Console.WriteLine(getOneId.ToString());
Console.WriteLine("Test 2");
var getAllId = GetAllEById(1, sampleData);
foreach (var item in getAllId)
Console.WriteLine(item.ToString());
private static E GetEById(int id, List<A> data)
return data.SelectMany(a => a.Data.SelectMany(b => b.Data.Data)).FirstOrDefault(e => e.Id == id);
private static IEnumerable<E> GetAllEById(int id, List<A> data)
return data.SelectMany(x => x.Data.SelectMany(y => y.Data.Data)).Where(x => x.Id == id);