Construye una consulta de LINQ GroupBy usando árboles de expresiones

Me he quedado en este problema durante una semana y no se ha encontrado ninguna solución.

Tengo un POCO como abajo:

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

Quiero saber durante un intervalo de fechas específico (agrupado por meses o años) la cantidad de revistas que se cuentan por un Nombre de Autor o una Categoría.

Después de enviar el objeto consultado al JSON, el serializador generó los datos JSON como se muestra a continuación (solo uso de JSON para demostrar los datos que quiero obtener, cómo serializar un objeto a un JSON no es mi problema)

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

O

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

Lo que sé es escribir una consulta LINQ en "método" 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() })
    });

Las condiciones agrupadas por meses o años, AuthorName o Category se pasarán por dos parámetros de método de tipo de cadena. Lo que no sé es cómo usar los parámetros de "Cadena Mágica" en un método GroupBy (). Después de algunas búsquedas en Google, parece que no puedo agrupar datos al pasar una cadena mágica como "AuthorName". Lo que debo hacer es crear un árbol de expresiones y pasarlo al método GroupBy ().

Cualquier solución o sugerencia es de agradecer.

Respuestas a la pregunta(1)

Su respuesta a la pregunta