Split a List of an Object group by some properties with lambda expression
.net-4.5, c#, lambda, linq, list
Solution
List<List<MyObj>> result = MyObjects.GroupBy(m => new { m.Name, m.Number })
.Select(g => g.ToList())
.ToList();
Problem
This is My Type: ``` public class MyObj { public long Number { get; set; } public string Name { get; set; } public string Message { get; set; } public DateTime RegisterDate { get; set; } } ``` So I have a list of `Myobj` And I need to split the list to some lists where the objects of `Name` and `Number` of objects are equal, some thing like grouped by `Name` and `Number`: assume this Sample: ``` List<MyObj> MyObjects = new List<MyObj>{ new MyObj() { Number = 1, Name = "BMW", Message = "msg1", RegisterDate = DateTime.Now }, new MyObj() { Number = 1, Name = "BMW", Message = "msg2", RegisterDate = DateTime.Now }, new MyObj() { Number = 1, Name = "BMW", Message = "msg3", RegisterDate = DateTime.Now }, new MyObj() { Number = 1, Name = "Honda", Message = "msg11", RegisterDate = DateTime.Now }, new MyObj() { Number = 1, Name = "Honda", Message = "msg12", RegisterDate = DateTime.Now }, new MyObj() { Number = 2, Name = "BMW", Message = "msg22", RegisterDate = DateTime.Now }, new MyObj() { Number = 2, Name = "BMW", Message = "msg23", RegisterDate = DateTime.Now }, new MyObj() { Number = 2, Name = "BMW", Message = "msg24", RegisterDate = DateTime.Now }, new MyObj() { Number = 2, Name = "Honda", Message = "msg30", RegisterDate = DateTime.Now }, new MyObj() { Number = 3, Name = "BMW", Message = "msg41", RegisterDate = DateTime.Now }, new MyObj() { Number = 3, Name = "BMW", Message = "msg42", RegisterDate = DateTime.Now }, new MyObj() { Number = 3, Name = "Ford", Message = "msg51", RegisterDate = DateTime.Now }, new MyObj() { Number = 3, Name = "Ford", Message = "msg52", RegisterDate = DateTime.Now }, new MyObj() { Number = 3, Name = "Ford", Message = "msg53", RegisterDate = DateTime.Now } }; ``` So I need a `List<List<MyObj>>` : ``` List<MyObj> MyObjectwith1AndBMW = new List<MyObj> { new MyObj() { Number = 1, Name = "BMW", Message = "msg1", RegisterDate = DateTime.Now }, new MyObj() { Number = 1, Name = "BMW", Message = "msg2", RegisterDate = DateTime.Now }, new MyObj() { Number = 1, Name = "BMW", Message = "msg3", RegisterDate = DateTime.Now } }; List<MyObj> MyObjectWith1AndHonda = new List<MyObj> { new MyObj() { Number = 1, Name = "Honda", Message = "msg11", RegisterDate = DateTime.Now }, new MyObj() { Number = 1, Name = "Honda", Message = "msg12", RegisterDate = DateTime.Now } }; List<MyObj> MyObjectWith2AndBMW = new List<MyObj> { new MyObj() { Number = 2, Name = "BMW", Message = "msg22", RegisterDate = DateTime.Now }, new MyObj() { Number = 2, Name = "BMW", Message = "msg23", RegisterDate = DateTime.Now }, new MyObj() { Number = 2, Name = "BMW", Message = "msg24", RegisterDate = DateTime.Now } }; List<MyObj> MyObjectWith2AndHonda = new List<MyObj> { new MyObj() { Number = 2, Name = "Honda", Message = "msg30", RegisterDate = DateTime.Now } }; List<MyObj> MyObjectwith3AndBMW = new List<MyObj> { new MyObj() { Number = 3, Name = "BMW", Message = "msg41", RegisterDate = DateTime.Now }, new MyObj() { Number = 3, Name = "BMW", Message = "msg42", RegisterDate = DateTime.Now } }; List<MyObj> MyObjectWith3AndFord = new List<MyObj> { new MyObj() { Number = 3, Name = "Ford", Message = "msg51", RegisterDate = DateTime.Now }, new MyObj() { Number = 3, Name = "Ford", Message = "msg52", RegisterDate = DateTime.Now }, new MyObj() { Number = 3, Name = "Ford", Message = "msg53", RegisterDate = DateTime.Now } }; ``` the result is : ``` List<List<MyObj>> result = new List<List<MyObj>> { MyObjectwith1AndBMW, MyObjectWith1AndHonda, MyObjectWith2AndBMW, MyObjectWith2AndHonda, MyObjectwith3AndBMW, MyObjectWith3AndFord }; ``` SO what is your suggestion? How can I find list of `MyObj` with same the equal names and equal numbers?