Создайте запрос LINQ GroupBy, используя деревья выражений

Я застрял на этой проблеме в течение недели, и решение не найдено.

У меня есть POCO, как показано ниже:

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

Я хочу знать в течение определенного промежутка времени (сгруппированного по месяцам или годам) количество журналов, подсчитываемых по AuthorName или категории.

После того, как я отправил запрошенный объект в сериализатор JSON, он сгенерировал данные JSON, как показано ниже (использование JSON для демонстрации данных, которые я хочу получить, не является проблемой для сериализации объекта в JSON)

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

ИЛИ ЖЕ

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

То, что я знаю, это написать запрос LINQ «методом», например:

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() })
    });

Условия, сгруппированные по месяцам или годам, AuthorName или Category, будут переданы двумя параметрами метода строкового типа. Чего я не знаю, так это как использовать параметры «Magic String» в методе GroupBy (). После некоторого поиска в Google кажется, что я не могу сгруппировать данные, передавая волшебную строку, такую как «AuthorName». Что мне нужно сделать, это построить дерево выражений и передать его в метод GroupBy ().

Любое решение или предложение приветствуется.

Ответы на вопрос(1)

Ваш ответ на вопрос