2014-02-24 55 views
0

我有一个CarID,ServiceType,ServiceDate,MilesLastService表。 我想检索特定ServiceType的特定汽车的最后一条记录的ServiceDate和MilesLastService。 linq查询将如何查看。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 }; 

有人能帮忙吗?

回答

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 
} 
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订购了检索列表。