2013-09-29 65 views
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。每次我尝试实现一个例子,但它不适合我。

回答

8

Entity Framework creating IQuerable of the most recent

这是最终为我工作:

 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, 
       }; 

还编辑我原来的职位与正确的查询我去了。

谢谢。

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(); 

}