public static void Test()
{
var list = new[]
{
new {p1 = 1, p2 = 'a', p3 = 'b'},
new {p1 = 1, p2 = 'c', p3 = 'd'},
new {p1 = 1, p2 = 'e', p3 = 'f'},
new {p1 = 2, p2 = 'a', p3 = 'b'},
new {p1 = 2, p2 = 'c', p3 = 'd'},
new {p1 = 3, p2 = 'a', p3 = 'b'},
new {p1 = 3, p2 = 'c', p3 = 'd'},
new {p1 = 3, p2 = 'e', p3 = 'f'},
new {p1 = 4, p2 = 'a', p3 = 'b'},
new {p1 = 5, p2 = 'a', p3 = 'b'},
new {p1 = 5, p2 = 'c', p3 = 'd'},
new {p1 = 5, p2 = 'e', p3 = 'f'},
new {p1 = 6, p2 = 'a', p3 = 'b'},
new {p1 = 6, p2 = 'e', p3 = 'f'}
};
for (int i = 1; i <= 3; i++)
{
var items = from p in list
group p by p.p1
into g
where g.Count() == i
from gi in g
select gi;
Console.WriteLine();
Console.WriteLine("For " + i);
Console.WriteLine();
foreach (var x in items)
{
Console.WriteLine("{0},{1},{2}", x.p1, x.p2, x.p3);
}
}
}