【问题标题】:entity framework linq query, get top N postIDs from favorite's table based on count实体框架linq查询,根据count从收藏的表中获取前N个postID
【发布时间】:2015-04-23 02:16:52
【问题描述】:

我有一个用于跟踪 Favorites 的数据库,看起来像

[ID]
[PostID]
[userID]
[DateFavorited]

我正在尝试在 Linq 中编写一个实体框架查询,以获取在此数据库中出现频率最高的 12 个PostIDs

我查看了文档,但我只是没有将如何做到这一点放在一起。目的是为了“最喜欢”的页面

我觉得有一个优雅的解决方案,但我让自己感到沮丧,以至于如果不让整个桌子都认为这是个坏主意,我想不出办法。

【问题讨论】:

  • 尝试 count 和 group by 然后 take(12)

标签: c# database linq entity-framework


【解决方案1】:

在 SQL 中,这将是:

SELECT
    TOP 12
    PostID,
    COUNT(*) As FavCount
FROM
    Favorites
GROUP BY
    PostID
ORDER BY
    FavCount DESC

在 Linq 中,我相信会是:

var ret = db.Favorites.GroupBy(
    fav => fav.PostId
).Select(
    favGroup => new {
        PostId = favGroup.Key,
        Count = favGroup.Count()
    }
).OrderBy(
    row => row.Count
).Take( 12 );

ret 的类型为IEnumerable<Anonymous{ PostId, Count }>

【讨论】:

  • 效果很好,感谢您的简洁回答。
猜你喜欢
  • 1970-01-01
  • 2021-12-25
  • 1970-01-01
  • 2013-08-20
  • 1970-01-01
  • 1970-01-01
  • 2020-04-05
  • 2020-08-10
  • 1970-01-01
相关资源
最近更新 更多