Linq: como transformar linhas em colunas com uma contagem (dados de tabela de referência cruzada)?

Eu acho que preciso de uma maneira de executar um pivô ou crosstab usando C # e Linq com um número indeterminado de colunas. No entanto, adicionarei alguns detalhes iniciais para ver para onde vai.

<Detalhe inicial>

Imagine uma tabela que tenha dois campos:

string EventName;
Datetime WhenItHappend;

Queremos gerar um relatório como o exemplo abaixo, onde agrupamos pelo EventName e, em seguida, temos uma série de colunas que calculam algumas contagens de data e hora. A dificuldade é obviamente um número variável de colunas.

EsporteJan 2010Jan 2009Fev 2010Fev 2009
Basquetebol26182316
Hóquei28.192518
Natação524548.43

O cliente pode criar qualquer número de contadores de eventos nomeados para um relatório. As funções são sempre as mesmas: "Nome", "Início", "Fim".

Alguma maneira de montar isso como um único resultado linq IQueryable em c #?

<Detalhe do início do fim>

No que diz respeito ao SQL, tentei criar uma tabela de intervalo de datas {TimeFrameName, begin, end} e juntei-a à tabela acima, onde begin <= whenItHappened e whenItHappened <= end, que produziu um bom conjunto de {EventName, TimeFrameName} e, em seguida, fez uma contagem (*), mas ainda restava como transformar os dados, transformando as linhas em colunas.

questionAnswers(1)

yourAnswerToTheQuestion