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

时间:2014-04-28 09:03:27

标签: c# entity-framework

我试图获取每种类型的最新内容,目前我使用类似于以下代码的内容来获取每种类型的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中进行分组来实现吗?如果没有,任何更清洁的解决方案?

1 个答案:

答案 0 :(得分:11)

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

注意:如果您想选择所有类型的索引,那么此处不需要where过滤。