根据日期查找最后一条记录

时间:2016-05-03 17:01:21

标签: c# linq asp.net-mvc-5

在我的控制器中,特别是创建操作..我希望其中一个文本框自动填充基于日期的最新记录中的值。

例如,如果在2016年5月2日我的车上行驶里程为26.3 ..那么当我想为5/3/2016创建记录时,TextBox应为autopopulated 26.3。< / p>

这就是我所拥有的:

public ActionResult Create(int? id)
{
    MaintenanceRecord newMaintenanceRecord = new MaintenanceRecord();

    decimal oldMaintenanceRecord = db.MaintenanceRecords.Single(x => x.AircraftID == id && x.DateEntered == DateTime.Today.AddDays(-1)).AirFrame;

    newMaintenanceRecord.DateEntered = DateTime.Today.Date;
    newMaintenanceRecord.AirFrame = oldMaintenanceRecord;


    ViewBag.AID = new SelectList(db.AInfoes, "ID", "RegNum");
    return View(newMaintenanceRecord);
}

但是当我进入创建页面时,我收到了:

  

LINQ to Entities无法识别方法'System.DateTime AddDays(Double)'方法,并且此方法无法转换为商店表达式。

那么我需要修改什么才能根据日期检索数据库中最新的Airframe

感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

您可以使用以下内容:

DateTime yesterday=DateTime.Today.AddDays(-1);
decimal oldMaintenanceRecord = db.MaintenanceRecords
                               .Single(x => x.AircraftID == id && 
                               x.DateEntered == yesterday)
                               .AirFrame;

答案 1 :(得分:2)

更重要的是,为什么你认为最近的一天只有一天? &#34;最近&#34;只是DateTime列中价值最大的那个,不是吗?

因此,只需按该值降序并获取第一条记录。像这样:

decimal oldMaintenanceRecord = db.MaintenanceRecords
    .Where(x => x.AircraftID == id)
    .OrderByDescending(x => x.DateEntered)
    .First().AirFrame;