получить 5 самых популярных значений и их общее количество Linq-to-Sql - PullRequest
0 голосов
/ 20 октября 2018

Я использую этот Linq to sql, чтобы получить наиболее появляющиеся записи.

List<int> result;
result = await context.InvoiceItems.GroupBy(q => q.ProductID)
        .OrderByDescending(gp => gp.Count())
        .Take(5)
        .Select(g => g.Key).ToListAsync();  

и получение значений типа int.но я также хочу получить общее количество раз, когда каждое значение встречается.как этот запрос SQL возвращается.

select productID, Count(*) AS value_occurrence from InvoiceItems group by productID  

см. Изображение этой таблицы

SQL results

1 Ответ

0 голосов
/ 20 октября 2018

Вам необходимо сгруппировать по ProductID, а затем спроецировать свой результат в класс Sample, одно свойство с .Key и второе свойство с .Count().

List<Sample> result = await context.InvoiceItems.GroupBy(q => q.ProductID)
                  .OrderByDescending(gp => gp.Count())
                  .Take(5)
                  .Select(g => new Sample { ProductID = g.Key, Value_Occurence = g.Count() }).ToListAsync();

result.ForEach(x => Console.WriteLine($"ID: {x.ProductID}, \t Value_Occurence: {x.Value_Occurence}"));

Вы можете спроецировать свой результатв приведенный ниже класс выборки.

class Sample
{
    public int ProductID { get; set; }
    public int Value_Occurence { get; set; }
}

Выход: Ввод только с одним InvoiceItem для каждого идентификатора продукта.

enter image description here

...