【发布时间】:2018-04-01 05:19:02
【问题描述】:
我有一组记录,其中包括 PatientID 和 Appointment Date。
我想按 PatientID 对它们进行分组,并按每个 PatientID 组中最早的约会对这些组进行排序。像这样……
ID ApptDate
----------------------
3 2/5/2005 (oldest compared to all groups , so group "ID = 3" is sorted first)
3 5/10/2006
3 6/2/2010
1 8/5/2007
1 9/1/2015
2 6/15/2009
2 9/19/2009
我很确定我需要先使用分组来获取每个 ID 的最旧日期值,然后按该值排序,但我无法理解这两个函数如何协同工作。
var query = from a in db.Appointments
group a by new { a.Id, a.ApptDate} into pa
select new {
ID = pa.Key.Id,
Date = pa.Min(x =>x.ApptDate) ...
...但我此时崩溃并燃烧。
任何帮助表示赞赏。
【问题讨论】:
-
尝试先下单再分组
-
来自 GroupBy 的文档 IGrouping
对象的生成顺序基于源中生成每个 IGrouping 。分组中的元素按照它们在源代码中出现的顺序产生。 -
为什么还要按 ApptDate 分组?为什么不简单地按 Id 分组,然后按 value.Select(x=>x.Min(y=>y.ApptDate)) 对组进行排序?
-
应该是 Min() 调用,因为您的问题是先对最旧的记录进行排序。
-
Tanveer - 你是对的。我更改了我的示例代码。
标签: c# entity-framework group-by sql-order-by