Pac*_*man 5 linq linq-to-entities entity-framework linq-to-sql
我正在建立一个论坛,每个帖子都可以发表评论。
我想加载一批N个帖子,因此每个帖子都加载前K条评论。
我已经从此代码开始,但是目前每个帖子都包含所有评论。如何仅在每个帖子中加载前K条评论,而不必对数据库进行K条调用?
List<ForumPost> result = ctx
.ForumPosts
.Include("Comments") // <-- ??? How to take first K ???
.Where(i => i.Thread.ID == threadID)
.OrderByDescending(i => i.Date)
.Take(N).ToList();
Run Code Online (Sandbox Code Playgroud)
谢谢!
当前,在EF中,您无法Include以任何方式过滤或限制d个相关实体。
如果您需要避免多个查询,则有解决方案,但是它们都涉及直接在SQL端进行工作。您可以使用:TVF(表值函数),存储过程,视图或简单查询。在每种情况下,都有不同的解决方案可将结果映射到您的实体。并且映射的实体将是不可跟踪的,因此您无法修改它们并将它们写回到服务器(除非您将它们显式添加到现有的DbContext)
您可以阅读Julie Lerman的这篇文章,以了解我在说什么:使用投影和存储库伪造经过过滤的热负荷。
您可以通过“ 数据用户”的声音为相关功能投票。查找“允许对包含扩展方法进行过滤”。最有可能的是,如果实现了这一点,也可以.Take在这种情况下使用。
有关此功能演变的更多信息,请查看EF Core github第1833期:支持过滤的Include。在这里您可以找到有趣的东西,例如:
| 归档时间: |
|
| 查看次数: |
1496 次 |
| 最近记录: |