我有两个表:类别和文章。一个类别可以有多篇文章。我想要显示按类别分隔的新文章概述。但我只想显示每个类别的前五篇文章。我应该如何编写查询来解决这个问题?
我的第一个想法是这样的:
var cat = from c in ctx.categories
where c.IsPublic == true
select c;但是这里包含了所有的文章,我不确定如何编写像c.articles.Take(5)这样的内容来查询。有可能吗?
哦,它是带有实体框架的ASP.NET MVC2。
发布于 2011-04-01 04:57:29
这对我很有效。这里重要的是要关闭延迟加载,以避免在迭代集合时加载所有文章:
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并更多地使用上下文,那么您可能更好地重新启用延迟加载...
ctx.ContextOptions.LazyLoadingEnabled = true;..。如果您的应用程序主要依赖于延迟加载,请在遇到其他查询时遇到麻烦。
发布于 2011-04-01 03:25:15
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,则应该可以这样做。
https://stackoverflow.com/questions/5505102
复制相似问题