3

我有一个 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 的旧版本,只需要最后创建的版本,以便我可以链接到它。

我读过很多例子,其中一些使用 FirstOrDefault 和一些使用 max。每次我尝试实现一个示例时,它都对我不起作用。

4

2 回答 2

9

实体框架创建最近的 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,
               };

还用我想要的正确查询编辑了我的原始帖子。

谢谢。

于 2013-09-29T14:41:11.150 回答
1

尝试关注

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

}

于 2013-09-29T00:26:49.307 回答