1

我是 linq 的新手,我需要一定的加入。所以我有两个表用于我想加入 Linq 的某些页面,类似于

用户收藏表:

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

我只是不确定从这里去哪里。

4

2 回答 2

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

于 2013-02-15T16:26:55.790 回答
-3

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

于 2013-02-15T15:59:12.330 回答