c#SQL-如何获取客户最近一次汽车服务的最新日期
如何获取客户最近一次汽车服务的最新日期 下面是数据,但不确定如何获取最近的日期c#SQL-如何获取客户最近一次汽车服务的最新日期,c#,sql,C#,Sql,如何获取客户最近一次汽车服务的最新日期 下面是数据,但不确定如何获取最近的日期 //Search Database if (query.Any()) { int carID = query.FirstOrDefault().Id; string carRegg = query.FirstOrDefault().regNo; string carMake
//Search Database
if (query.Any())
{
int carID = query.FirstOrDefault().Id;
string carRegg = query.FirstOrDefault().regNo;
string carMake = query.FirstOrDefault().Make;
string carModel = query.FirstOrDefault().Model;
var test = (from a in dbC.Cars
where a.Id == carID
join b in dbC.Services on a.Id equals b.CarId
join c in dbC.PartsUseds on b.ServiceWrkNo equals c.ServiceServiceWrkNo
join d in dbC.Parts on c.PartsPartNo equals d.PartNo
select new
{
serviceNum = b.ServiceWrkNo,
date = b.Date,
PartNo = c.PartsUsedNo,
replacedParts = d.PartName
}).ToList();
Console.WriteLine();
Console.WriteLine("- - - - - - - - - - - - - - - - - - - - - - - - - - - - ");
Console.WriteLine("CAR SERVICE DETAILS: " + carRegg + " " + carMake + " " + carModel);
Console.WriteLine("- - - - - - - - - - - - - - - - - - - - - - - - - - - - " + "\n");
Console.WriteLine("ServiceNo \t DATE \t Items Replaced \t Cost");
foreach (var item in test)
{
float cost = item.PartNo + item.PartNo;
Console.WriteLine(item.serviceNum + "\t\t " + item.date.ToShortDateString() + "\t\t " + cost);
}
}
orderby b.Date descending
按日期值对记录进行排序,最新的是第一个
.Take(5.ToList()
仅显示最近的5个,例如。或者您可以尝试类似的方法-仅返回具有最长服务日期的数据
var test = (from a in dbC.Cars
join b in dbC.Services on a.Id equals b.CarId
join c in dbC.PartsUseds on b.ServiceWrkNo equals c.ServiceServiceWrkNo
join d in dbC.Parts on c.PartsPartNo equals d.PartNo
where a.Id == carID && b.Date == ((from b1 in dbC.Services where b1.CarId == b.CarId select b1.Date).Max())
select new
{
serviceNum = b.ServiceWrkNo,
date = b.Date,
PartNo = c.PartsUsedNo,
replacedParts = d.PartName
}).FirstOrDefault();
如果我们有导航属性(已经从外键自动创建),我想说的是,您可以执行类似以下psuedo代码的操作:
var lastService = (from s in dbC.Services
where s.CarId = carID
orderby s.Date descending
select new
{
s.ServiceWrkNo,
s.Date,
ServiceParts = s.PartsUsed
}).FirstOrDefault();
这是为了展示连接与导航属性的概念。您可以按日期降序订购,并且只获取第一条记录。如果您按客户分组,则可以找到最大服务日期。例如,请参见这些表是否定义了外键?使用LINQ,您实际上可以导航而不是加入。SQL中需要加入,但在LINQ中,只有在缺少导航属性(外键)的情况下才需要加入。感谢您的重播。如果可能的话,寻找它只是为了填充最近的日期吗?将
.ToList()
更改为.FirstOrDefault()
您需要删除您的foreach
,并将其替换为只使用一个条目的逻辑。
var lastService = (from s in dbC.Services
where s.CarId = carID
orderby s.Date descending
select new
{
s.ServiceWrkNo,
s.Date,
ServiceParts = s.PartsUsed
}).FirstOrDefault();