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);