LINQ - GroupBy una clave y luego poner cada elemento agrupado en 'cubos' separados

Tengo una lista de elementos como tal:

public class Item
{
    public int ItemId { get; set; }
    public string ItemName { get; set; }
    public int ListId { get; set; }
}

1 Test1 1

2 Test2 1

3 Test3 1

4 List 2

5 List2 2

6 Testing 3

7 Testing2 3

8 Testing3 3

¿Hay alguna forma de agruparme porListId y colóquelos en cubos separados, es decir,ListId1 bucket tendrá todos los elementos conListId == 1. La lista se devuelve dinámicamente desde SQL, por lo que no sé de antemano cuántosListId habrá

Respuestas a la pregunta(3)

Su respuesta a la pregunta