【问题标题】:Join two tables sortby user click count then everyone click count using linq加入两个表 sortby 用户点击计数然后每个人都使用 linq 点击计数
【发布时间】:2013-02-15 15:56:40
【问题描述】:

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

我只是不知道从这里去哪里。

【问题讨论】:

  • 您没有在任何地方过滤当前用户...
  • 页面是否有导航属性UserFavorites?而且,这是 linq to sql 吗?

标签: c# linq join favorites


【解决方案1】:

试试这个:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我会试一试。无论如何,我需要学习存储过程。谢谢
    • 这不是一个复杂的连接,使用存储过程大大增加了维护代码的复杂度。
    • 而且,除了 Bobson 所说的,这实际上并不能回答问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-12
    • 2021-11-05
    • 1970-01-01
    相关资源
    最近更新 更多