Linq多个聚合和最大

时间:2014-02-24 11:31:19

标签: c# linq

我有一个包含CarID,ServiceType,ServiceDate,MilesLastService的表。 我想检索某个ServiceType的特定汽车的最后一条记录的ServiceDate和MilesLastService。 linq查询将如何显示。

在我的脑海中,查询看起来像这样:

Max(select ServiceDate, MilesLastService
Where (CarID = 50 && ServiceType == "TransmissionService")

我正在尝试这样的事情,但我无法弄清楚

var d2 = from m in db.Table<ServiceRecords>()
where m.CarID == carid
group m by new { m.ServiceDate, m.Milage };

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

以下查询将为给定汽车的每种服务类型选择最后一条记录:

from sr in db.Table<ServiceRecords>()
where sr.CarID == id
group sr by sr.ServiceType into g
select g.OrderByDescending(sr => sr.ServiceDate).First();

如果您只想获得里程和日期,那么

from sr in db.Table<ServiceRecords>()
where sr.CarID == id
group sr by sr.ServiceType into g
let lastRecord = g.OrderByDescending(sr => sr.ServiceDate).First()
select new {
   lastRecord.MilesLastService,
   lastRecord.ServiceDate
}

答案 1 :(得分:0)

您可以像下面这样使用LINQ:

var d2 = (from m in db.Table<ServiceRecords>()
          where m.CarID == carid && m.ServiceType == "TransmissionService"
          select new {ServiceDate = m.ServiceDate, MilesLastService = m.MilesLastService})
         .OrderBy(x => x.ServiceDate)
         .Last();
var milesLastService = d2.MilesLastService;
var serviceDate = d2.ServiceDate;

我已使用ServiceDate订购了检索到的列表。