C# 不能从日期时间中减去
我有一个数据库,其中有C# 不能从日期时间中减去,c#,asp.net-mvc,linq,C#,Asp.net Mvc,Linq,我有一个数据库,其中有TimeStart和TimeEnd,所以我只想得到StudentName值,它们需要30天才能完成。因此,每个StudentName都有一个TimeStart和一个TimeEnd 视图模型: public String StudentName { get; set; } public List<SelectListItem> DurationDays { set; get; } public int SelectedDurationDay
TimeStart
和TimeEnd
,所以我只想得到StudentName
值,它们需要30天才能完成。因此,每个StudentName
都有一个TimeStart
和一个TimeEnd
视图模型:
public String StudentName { get; set; }
public List<SelectListItem> DurationDays { set; get; }
public int SelectedDurationDays { set; get; }
如您所见,我执行了一个SelectList
项来创建一个新的TimeStart
和TimeEnd
,以下是我的逻辑:
创建获取:
public ActionResult Create()
{
var vm = new StudentViewModel
{
DurationDays = new List<SelectListItem>()
{
new SelectListItem {Value = "1", Text = "1 year"},
new SelectListItem {Value = "2", Text = "2 years"},
}};
return View(vm);
}
我的问题哪里做错了?我只想选择靠近TimeEnd的StudentName
编辑
作为@Stephen Muecke的评论,我需要在GET方法中设置TimeEnd
,如果我在发布前没有TimeEnd
(我在发布新学生时创建它)?如果模型。TimeEnd
是默认未初始化的(1/1/0001 12:00 AM
),那么尝试从中减去30天是行不通的。在尝试从该属性中减去之前,请确保已使用实时日期时间填充该属性
我想,当您将该值提交回Post操作时,该值根本没有填充。正如前面提到的Darin Dimitrov一样,您在一个无效点进行减法
相反,您应该在今天的日期后再加上30天,因为您希望查询在此时间跨度内过期的记录
var datediff = DateTime.Now.AddDays(30);
var studentsAboutToExpire = db.MyModelList
.Where(x => x.StudentName == model.StudentName && x.TimeEnd<= datediff);
var datediff=DateTime.Now.AddDays(30);
var studentsAboutoExpire=db.MyModelList
.Where(x=>x.StudentName==model.StudentName&&x.TimeEnd调用该查询时,TimeEnd
的值是多少?TimeEnd
根据所选的持续天数进行分配,例如,如果我在我的创建视图中选择“1年”,我的“TimeEnd”是DateTime.Now
+DateTime.Now.AddYears(1)
,我试图让StudentName知道TimeEnd
在索引列表视图中将近30天。我建议您调试代码并检查实际值-几乎可以肯定是1/1/0001
,正如Darin Dimitrov指示的那样,我进入我的服务器资源管理器,TimeEnd
是03/03/2017 12:00 am.
,代码中没有任何位置是否显示了如何设置模型的值。TimeEnd
-显示如何访问数据库并对其进行设置。您当前拥有的只是一个GET方法,用于初始化StudentsViewModel
的新实例,该实例将具有默认的TimeEnd
值1/1/0001
TimeEnd
,并根据g所选的持续天数,例如,如果我在创建视图中选择“1年”,我的“时间结束”是DateTime.Now
+DateTime.Now.AddYears(1)
好的,现在请确保此值实际到达Post操作,并且在调用.Add(-30)之前,您已经为model.TimeEnd
属性正确分配了real DateTime
在上面。我去我的ServerExplorer,时间结束是2017年03月03日12:00:00。
在我的帖子之后,我的查询是在索引上而不是post
操作,我只想得到这个值,减去30天,得到StudentName
,大约是2017年03月03日12:00:00。30天你是说m吗odel.TimeEnd
是2017年3月3日12:00:00 a.m.
在调用.AddDays(-30)
之前吗?不,我用StartDate
和EndDate
创建了一个新学生,创建后,它现在有了值,我想得到EndDate值你完全正确!
public async Task<ActionResult> Create([Bind(Include = "TimeStart,TimeEnd,StudentName,SelectedDurationDays")] StudentsViewModel model)
{
var endDate = DateTime.Now.AddYears(model.SelectedDurationDays);
var students = new Students
try
{
if (ModelState.IsValid)
{
StudentName = model.StudentName,
TimeStart = DateTime.Now,
TimeEnd = endDate
};
db.WebPagesList.Add(students);
db.SaveChanges();
return RedirectToAction("Index", "Student");
}
catch (Exception)
{
//exception Return
}
}
public async Task<ActionResult> Index(WebPages model)
{
var datesub = model.DomainExp.AddDays(-30);
var datetimened = db.StudentList.Where(x => x.StudentName== model.StudentNAme
&& x.TimeEnd<= datesub);
var StudentList = db.StudentList.Include(w => w.Student);
return View(await StudentList.ToListAsync());
}
var datesub = model.TimeEnd.AddDays(-30);
var datetimened = db.MyModelList.Where(x => x.StudentName == model.StudentName && x.TimeEnd<= datesub);
var datesub = model.TimeEnd.AddDays(-30);
var datediff = DateTime.Now.AddDays(30);
var studentsAboutToExpire = db.MyModelList
.Where(x => x.StudentName == model.StudentName && x.TimeEnd<= datediff);