我正在使用我的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
返回。
答案 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)并且它没有这样做。