2014-10-22 6 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 

같은 결과를 반환 내가 왜 내 Linq에없는 총 수를 보여 않습니다

11, Shoes 
9, Shirts 
something else 

가 될 결과를 예상했을 것 ?

+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); 
관련 문제