实体框架按查询分组

时间:2014-05-20 13:30:05

标签: c# asp.net asp.net-mvc entity-framework

我们说我有一张包含以下数据的表格:

Id | title | image | page
-------------------------
 1   test    a.jpg    1
 2   test    b.jpg    2
 3   test 1  c.jpg    1
 4   test 1  d.jpg    2

我如何按标题对数据进行分组并检索第一批结果。像这样:

Id | title | image | page
-------------------------
 1   test    a.jpg    1
 3   test 1  c.jpg    1

到目前为止,我尝试过但没有运气的是:

var result = _db.Records.Select(r => new Records
        {
            Id = r.Id,
            title = r.title,
            image = r.image,
            page = r.page
        }).OrderByDescending(x => x.Id)
        .GroupBy(x => x.title)
        .Select(x => x.First()).AsQueryable();

我是以正确的方式来做这件事的吗?任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:1)

第一个选择似乎没有做任何事情。您已经拥有记录,并且您正在选择记录。 第二个Select也不需要。而不是致电x => x.First()为什么不拨打First()?或者我错过了什么?

var result = _db.Records
    //.OrderByDescending(x => x.Id)
    .GroupBy(x => x.title)
    .First();

编辑:OrderBy正在做的工作被GroupBy

否定(有些)

编辑2:以上只会获得第一组。所以x => x.First()是正确的:

var result = _db.Records
    .GroupBy(x => x.title)
    .Select(group => group.First());

答案 1 :(得分:1)

为什么要订购以及为什么要返回AsQueryable?这就是我所做的。如果必须返回可查询,则追加AsQueryable()仍然有效。

Records.GroupBy (r => r.Title)
.Select (r =>r.First ())

答案 2 :(得分:0)

var results
    = _db.Records.GroupBy(
        i => i.title,
        (key, group) => group.First()
    )

希望这有帮助