2014-10-22 2 views
0

Я пытаюсь получить 3 самых популярных продуктов из моей базы данных. У меня есть таблица с кликами, в которой содержится продукт, на который есть клик, а также некоторые другие не важные поля (например, IP, дата и т. Д.).Почему linq не группирует/считает, как ожидалось

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

Мой запрос linq не делает то, что я надеялся. Мой код:

var results == (from r in this._dc.Clicks 
       group r by r 
       into g 
       orderby g.Count() descending 
       select new { Total = g.Count(), Productc= g.Key.Product }).Take(3).ToList(); 

Проблема заключается в том, это возвращает результаты, такие как

11, Shoes 
5, Shirts 
4, Shirts 

Я бы ожидал, что результаты будут

11, Shoes 
9, Shirts 
something else 

Почему мой Linq не показывает общее количество ?

+1

не должно быть 'group r by r.Product'? –

+0

Если вам нужна группа по классу ссылок, она должна реализовать [IEquatable] (http://msdn.microsoft.com/en-us/library/ms131187 (v ​​= vs.110) .aspx) – Grundy

ответ

2

Ваша группировка на самом деле ничего не группирует. Вам нужно придумать ключ для группы, а не сам объект. Видимо, вы должны группироваться по Product.

var query = 
    (from click in this._dc.Clicks 
    group click by click.Product into g 
    let count = g.Count() 
    orderby count descending 
    select new { Product = g.Key, Total = count }).Take(3); 
Смежные вопросы