加入两个表排序用户点击计数然后每个人使用linq点击计数

时间:2013-02-15 15:56:41

标签: c# linq join favorites

我是linq的新手,我需要一定的加入。因此,对于我想要与Linq加入的某些页面,我有两个表,类似于

UserFavorites 表格:

Page.id
userClickCount

页面表格:

id
everyoneClickCount

用户收藏是在点击或收藏时创建的,因此只有一定数量的链接。我想显示两个表中的所有结果,按用户点击次数排序,然后大多数人点击。

我现在有这个,但是按照每个人的数量排序。

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();

我只是不确定从哪里开始。

2 个答案:

答案 0 :(得分: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))

答案 1 :(得分:-3)

对于复杂的连接,我建议编写一个存储过程,然后使用EF和linq来调用此SP。