Construir uma consulta LINQ GroupBy usando árvores de expressão

Eu tenho preso neste problema por uma semana e nenhuma solução encontrada.

Eu tenho um POCO como abaixo:

public class Journal {
    public int Id { get; set; }
    public string AuthorName { get; set; }
    public string Category { get; set; }
    public DateTime CreatedAt { get; set; }
}

Eu quero saber durante um período específico (agrupados por meses ou anos) a quantidade de diários contados por um AuthorName ou uma categoria.

Depois de enviar o objeto consultado para o serializador JSON, os dados JSON gerados são mostrados abaixo (apenas usando JSON para demonstrar os dados que desejo obter, como serializar um objeto para um JSON não é problema meu)

data: {
    '201301': {
        'Alex': 10,
        'James': 20
    },
    '201302': {
        'Alex': 1,
        'Jessica': 9
    }
}

OU

data: {
    '2012': {
         'C#': 230
         'VB.NET': 120,
         'LINQ': 97
     },
     '2013': {
         'C#': 115
         'VB.NET': 29,
         'LINQ': 36
     }
}

O que eu sei é escrever uma consulta LINQ em "método de maneira" como:

IQueryable<Journal> query = db.GroupBy(x=> new 
    {
        Year = key.CreatedAt.Year,
        Month = key.CreatedAt.Month
    }, prj => prj.AuthorName)
    .Select(data => new {
        Key = data.Key.Year * 100 + data.Key.Month, // very ugly code, I know
        Details = data.GroupBy(y => y).Select(z => new { z.Key, Count = z.Count() })
    });

As condições agrupadas por meses ou anos, AuthorName ou Category serão passadas por dois parâmetros do método do tipo string. O que eu não sei é como usar os parâmetros "Magic String" em um método GroupBy (). Depois de alguns googling, parece que não é possível agrupar dados passando uma string mágica como "AuthorName". O que devo fazer é construir uma árvore de expressão e passá-la para o método GroupBy ().

Qualquer solução ou sugestão é apreciada.

questionAnswers(1)

yourAnswerToTheQuestion