首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Take包含实体

使用Take包含实体
EN

Stack Overflow用户
提问于 2011-04-01 03:19:50
回答 2查看 58关注 0票数 0

我有两个表:类别和文章。一个类别可以有多篇文章。我想要显示按类别分隔的新文章概述。但我只想显示每个类别的前五篇文章。我应该如何编写查询来解决这个问题?

我的第一个想法是这样的:

代码语言:javascript
复制
var cat = from c in ctx.categories
          where c.IsPublic == true
          select c;

但是这里包含了所有的文章,我不确定如何编写像c.articles.Take(5)这样的内容来查询。有可能吗?

哦,它是带有实体框架的ASP.NET MVC2。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-01 04:57:29

这对我很有效。这里重要的是要关闭延迟加载,以避免在迭代集合时加载所有文章:

代码语言:javascript
复制
ctx.ContextOptions.LazyLoadingEnabled = false; // assuming you are in EF 4.0

var query = ctx.categories
    .Where(c => c.IsPublic)
    .Select(c => new { 
        Category = c, 
        Articles = c.Articles.Take(5)
    }).ToList().Select(x => x.Category);

foreach (var category in query)
{
    foreach (var article in category.Articles)
    {
        // runs only 5 times through this loop
    }
}

编辑

如果您不在上面的代码片段之后处理ctx并更多地使用上下文,那么您可能更好地重新启用延迟加载...

代码语言:javascript
复制
ctx.ContextOptions.LazyLoadingEnabled = true;

..。如果您的应用程序主要依赖于延迟加载,请在遇到其他查询时遇到麻烦。

票数 2
EN

Stack Overflow用户

发布于 2011-04-01 03:25:15

代码语言:javascript
复制
ctx.categories
    .Where(c => c.IsPublic)
    .Select(c => new 
    { 
        Category = c, 
        Articles = c.Articles.OrderBy(a => a.Whatever).Take(5)
    ).Select(c => c.Category);

假设您的类名是Category,其中包含一个名为文章的EntityCollection,则应该可以这样做。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5505102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档