我有一个NoteBrief
public int Id { get; set; }
public string Title { get; set; }
public DateTime Created { get; set; }
public int ParentNoteId { get; set; }
Run Code Online (Sandbox Code Playgroud)
数据看起来像
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
Run Code Online (Sandbox Code Playgroud)
我想要做:
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;
Run Code Online (Sandbox Code Playgroud)
现在我有:
public IQueryable<NoteBrief> GetNotes()
{
return _ctx.Notes.Select(r => new NoteBrief
{
Id = r.Id,
Title = r.Title,
Created = r.Created,
ParentNoteId = r.ParentNoteId,
});
}
Run Code Online (Sandbox Code Playgroud)
我对此很满意,但实际上并不需要更新的parentNoteId版本,只需要最后创建的那个,以便我可以链接到它.
我读过很多例子,其中一些使用FirstOrDefault,另一些使用max.每次我尝试实现一个例子,它对我不起作用.
这最终对我有用:
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,
};
Run Code Online (Sandbox Code Playgroud)
还编辑了我的原始帖子,我正在寻找正确的查询.
谢谢.
归档时间: |
|
查看次数: |
10859 次 |
最近记录: |