如果您希望每個Id
的日期最高的整個行都可以使用以下代碼(使用LinqPad編寫)。如果你只想要Id
,你可以使用@ BurnsBA的答案,因爲它會稍微更有效率。
void Main()
{
var data = new List<Record>
{
new Record(){Id=1, Value=1, Date=new DateTime(2017,1,1)},
new Record(){Id=1, Value=2, Date=new DateTime(2017,2,1)},
new Record(){Id=1, Value=3, Date=new DateTime(2017,3,1)},
new Record(){Id=2, Value=5, Date=new DateTime(2017,1,1)},
new Record(){Id=2, Value=6, Date=new DateTime(2017,2,1)},
};
var query = data.GroupBy(d => d.Id)
.SelectMany(g => g.OrderByDescending(d => d.Date)
.Take(1));
query.Dump();
}
public class Record
{
public int Id { get; set; }
public int Value { get; set; }
public DateTime Date { get; set; }
}
結果:
首先它按Id
,然後降序排序由Date
的組中的項,並返回第一個,然後SelectMany
變平的列表。
請出示你已經嘗試了什麼,也許用'GroupBy' ... –
你想要什麼結果,開始'Id','Value',或最高日整行? –
另外,你是否需要這個實體框架?如果是這樣,它可能會限制一些可能的答案。 –