实体框架-选择分组依据,选择最大日期 [英] Entity Framework - select group by, select max date

查看:76
本文介绍了实体框架-选择分组依据,选择最大日期的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个NoteBrief

I have a NoteBrief

public int Id { get; set; } 
public string Title { get; set; } 
public DateTime Created { get; set; }
public int ParentNoteId { get; set; }

数据看起来像

1 Title1 03/31/1987 1
2 Title1 03/31/1988 1
3 Title3 01/01/2000 3
4 Title4 01/01/2001 4
5 Title4 01/01/2005 4

我想做:

SELECT t1.*
FROM Notes AS t1 LEFT JOIN Notes AS t2
ON (t1.ParentNoteId = t2.ParentNoteId AND t1.Created < t2.Created)
WHERE t2.Created IS NULL;

现在我有:

 public IQueryable<NoteBrief> GetNotes()
    {

        return _ctx.Notes.Select(r => new NoteBrief
        {
            Id = r.Id,
            Title = r.Title,
            Created = r.Created,
            ParentNoteId = r.ParentNoteId,
        });

    }

我对此感到满意,但真的不满意需要parentNoteId的旧版本,只需要最后创建的版本,这样我就可以链接到它。

I'm happy with this, but really don't need the older revisions of a parentNoteId, just need the one that was created last so i can link to it.

我已经阅读了很多示例,其中一些使用FirstOrDefault还有一些使用最高每次我尝试实现一个示例时,它对我都不起作用。

I've read many examples, some of which use FirstOrDefault and some that use max. Everytime i try to implement an example though, it doesn't work for me.

推荐答案

创建最近的IQuerable的实体框架

这最终对我有用:

        return from e in _ctx.Notes
               group e by e.ParentNoteId into g
               select g.OrderByDescending(e => e.Created).FirstOrDefault() into r
               select new NoteBrief
               {
                   Id = r.Id,
                   Title = r.Title,
                   Created = r.Created,
                   ParentNoteId = r.ParentNoteId,
               };

也用正确的查询编辑了我的原始帖子。

Also edited my original post with correct query i was going for.

谢谢。

这篇关于实体框架-选择分组依据,选择最大日期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆