在Controller中,返回[verified_date]从当前日期开始超过3个月的记录?

时间:2015-02-26 15:59:24

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

我正在使用我的MVC5 Code-First webapp中的验证资产视图,我正在尝试(默认情况下)仅返回INV_Assets[verified_date]年龄超过3的记录从当前Date开始的几个月。

我尝试了以下内容,但接收

  

LINQ to Entities无法识别方法'System.DateTime   AddMonths(Int32)'方法,这个方法无法翻译成   商店表达

加载视图时出错:

public class VerifyAssetsController : Controller
{
    private InventoryTrackerContext db = new InventoryTrackerContext();

    // GET: VerifyAssets
    public async Task<ActionResult> Index()
    {
        var iNV_Assets = db.INV_Assets.Where(i => i.verified_date < DateTime.Now.AddMonths(-3)).Include(i => i.Location).Include(i => i.Manufacturer).Include(i => i.Model).Include(i => i.Status).Include(i => i.Type).Include(i => i.Vendor);
        return View(await iNV_Assets.ToListAsync());
    }

任何人都可以提供一些有关如何解决这个问题的见解吗?

理想情况下,我希望默认值从当前日期开始提前3个月,然后在视图上显示DropDowns,这样用户就可以指定1-12 Months / {{1} } / Weeks从当前Days返回。

1 个答案:

答案 0 :(得分:4)

不是在查询中计算上个月,而是在查询之前获取该值并将其传递给:

var previousDate = DateTime.Now.AddMonths(-3);
var iNV_Assets = db.INV_Assets
                   .Where(i => i.verified_date < previousDate)
                   .Include(i => i.Location)
                   .Include(i => i.Manufacturer)
                   .Include(i => i.Model)
                   .Include(i => i.Status)
                   .Include(i => i.Type)
                   .Include(i => i.Vendor);

(我不确定你为什么要添加所有Include语句,如果你只想选择Assets

您的代码失败的原因是它正在尝试将DateTime.Now.AddMonths(-3)转换为谎言数据源语言(可能是SQL)并且它没有这样做。