private void foo1() { RootObject testObject = new RootObject() { RootIntElement = 1, RootStringElement = "test", Childs = new List <ChildObject>() }; testObject.Childs.Add(new ChildObject() { ChildIntElement = 11, ChildStringElement = "Child1" }); testObject.Childs.Add(new ChildObject() { ChildIntElement = 12, ChildStringElement = "Child2" }); testObject.Childs.Add(new ChildObject() { ChildIntElement = 13, ChildStringElement = "Child3" }); testObject.Childs.Add(new ChildObject() { ChildIntElement = 14, ChildStringElement = "Child4" }); testObject.Childs.Add(new ChildObject() { ChildIntElement = 15, ChildStringElement = "Child5" }); List <ChildObject> targets = new List <ChildObject>(); targets.Add(new ChildObject() { ChildIntElement = 11, ChildStringElement = "TargetChild1" }); targets.Add(new ChildObject() { ChildIntElement = 11, ChildStringElement = "TargetChild2" }); targets.Add(new ChildObject() { ChildIntElement = 11, ChildStringElement = "TargetChild3" }); targets.Add(new ChildObject() { ChildIntElement = 14, ChildStringElement = "TargetChild4" }); targets.Add(new ChildObject() { ChildIntElement = 16, ChildStringElement = "TargetChild5" }); testObject.Childs.ForEach(l => { l.Childs = targets.Where(p => p.ChildIntElement.ToString() == l.ChildIntElement.ToString()).ToList(); }); var result1 = targets.Find(u => u.ChildIntElement == 10); var result2 = targets.First(u => u.ChildIntElement == 110); //throw exception!! var result3 = targets.FirstOrDefault(u => u.ChildIntElement == 10); var result4 = targets.FindAll(u => u.ChildIntElement == 11); var result5 = targets.Any(u => u.ChildIntElement == 15); int pageindex = 10; int pagesize = 2; var result6 = targets.Skip((pageindex - 1) * pagesize).Take(pagesize).ToList(); var result7 = targets.Select(o => o.ChildStringElement).Distinct() .Select((o, i) => string.Format("{0}. {1}", i + 1, o)).ToList(); ChildObject FirstOrDefaultResult = targets.FirstOrDefault(u => u.ChildIntElement == 24); }