在EntityFramework中选择每个组的前n行

8
我正在尝试获取每种类型的最新内容,目前我正在使用类似以下代码的方式来获取每种类型的n条记录。
int n = 10;
var contents = Entities.OrderByDescending(i => i.Date);

IQueryable<Content> query = null;
for (int i = 1; i<=5; i++)
{
    if (query == null)
    {
        query = contents.Where(c => c.ContentTypeIndex == i).Take(n);
    }
    else
    {
        query = query.Concat(contents.Where(c => c.ContentTypeIndex == i).Take(n));
    }
}

另一个解决方案可以是创建一个存储过程(SP),但是是否可以通过在EF中进行分组来实现?如果不行,有没有更简洁的解决方案?


2
@AndyRefuerzo 不,完全不是。 - rikitikitik
1个回答

12
contents.Where(c => c.ContentTypeIndex >= 1 && c.ContentTypeIndex <= 5)
        .GroupBy(c => c.ContentTypeIndex)
        .SelectMany(g => g.Take(n));

注意:如果你想选择所有类型的索引,那么你不需要在这里使用where过滤器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接