【问题标题】:In Controller, return records with [verified_date] older than 3 months from current date?在 Controller 中,返回 [verified_date] 距当前日期超过 3 个月的记录?
【发布时间】:2015-02-26 15:59:24
【问题描述】:

我正在我的 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/Weeks/Days 返回来自当前的Date

【问题讨论】:

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


    【解决方案1】:

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

    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),但它没有这样做。

    【讨论】:

    • 感谢 Habib,这非常成功!在 Include 上,每一个都是我在INV_Assets 模型上设置为ForeignKeys 的维护表——例如:[Required] public int Manufacturer_Id { get; set; } [ForeignKey("Manufacturer_Id")]
    猜你喜欢
    • 2021-03-02
    • 2021-09-03
    • 1970-01-01
    • 2018-01-07
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多