2013-02-15 1 views
1

저는 linq을 처음 사용하고 특정 조인이 필요합니다.두 테이블을 합치면 사용자 클릭 수를 계산 한 다음 linq을 사용하여 모든 사용자가 클릭 수를 계산합니다.

Page.id 
userClickCount 

페이지 테이블 :

id 
everyoneClickCount 

사용자의 마음에 드는는 그래서

UserFavorites 테이블 같은 있습니다 내가 Linq에 함께 참여하고 싶은 특정 페이지에 대한 두 개의 테이블이 클릭하거나 즐겨 찾기를 만들 때 만들어 지므로 일정량의 링크 만 있습니다. 두 테이블의 모든 결과를 표시하고 사용자가 가장 많이 클릭 한 다음 모든 사용자가 가장 많이 클릭하여 정렬합니다.

나는 지금 당장 가지고 있지만 모든 사람의 수에 따라 분류됩니다.

pages = (from page in context.Page 
       join ps in 
      (from favs in context.UserFavorites 
       select favs) on page.Id equals ps.Page.Id into temp 
      from t in temp.DefaultIfEmpty() 
       orderby t.userClickCount descending, t.Page.everyoneClickCount descending, t.Page.PageName ascending 
      select dash).ToList(); 

여기에서 어디로 가야할지 모르겠습니다.

+0

으로 바꿉니다. 현재 사용자를 필터링하지 않습니다. – Bobson

+0

페이지에 탐색 속성 인 'UserFavorites'가 있습니까? 그리고, SQL에 대한 linq입니까? –

답변

-3

복잡한 조인의 경우 저장 프로 시저를 작성한 다음 EF 및 linq를 사용하여이 SP를 호출하는 것이 좋습니다.

+0

나는 그것을 줄 것이다. 어쨌든 저장 프로 시저를 배워야합니다. 감사합니다 –

+1

이것은 복잡한 결합이 아니며 저장 프로 시저를 사용하면 코드 유지 관리의 복잡성이 크게 증가합니다. – Bobson

+1

그리고 Bobson이 말한 것의 꼭대기에는 실제로이 질문에 대답하지 않습니다. –

0

이 시도 :이 모든 사용자의 클릭 횟수의 합으로 주문 것

var pages = context.Pages.Select(page => new { 
               PageData = page, 
               Favs = page.UserFavorites 
              }) 
         .OrderByDescending(page => (page.Fav.Sum(userClickCount)) 
         .ThenBy(page => page.PageData.everyoneClickCount) 
         .ThenBy(page => page.PageData.Name) 
         .ToList(); 

참고. 현재 사용자 만 사용하려는 경우 해당 줄을 .OrderByDescending(page => (page.Fav.Where(u => u.userID == userid).Sum(userClickCount))

관련 문제