Создайте запрос 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 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, будут переданы двумя параметрами метода строкового типа. Что я не делаюне знаю, как использовать "Волшебная Строка " параметры в методе GroupBy (). После некоторого поиска в Google кажется, что я не могу сгруппировать данные, передавая волшебную строку вроде "Имя автора", Что мне нужно сделать, это построить дерево выражений и передать его в метод GroupBy ().

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

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

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