using System.Collections.Generic;
public static void Main()
var list = new List<MyObj>()
new MyObj { Id = 1, MyProp = true, Name = "A", Surname = "B"},
new MyObj { Id = 2, MyProp = false, Name = "A", Surname = "B"},
new MyObj { Id = 3, MyProp = true, Name = "B", Surname = "B"},
new MyObj { Id = 4, MyProp = true, Name = "B", Surname = "B"},
new MyObj { Id = 5, MyProp = true, Name = "C", Surname = "B"},
var query = list.Where(x => x.MyProp);
var groups = query.GroupBy(x => new { x.Name, x.Surname }).ToList();
foreach (var group in groups)
DoSomethingWithGroup(group.Key, group);
static void DoSomethingWithGroup<T>(T groupKey, IEnumerable<MyObj> entities)
Console.WriteLine(groupKey);
foreach (var entity in entities)
Console.WriteLine($"- {entity.Id}");
public bool MyProp { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
public int Id { get; set; }