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();