如何从2016年开始?

How to take year 2016 onwards?

下面这段代码工作正常 w/o payrollEndDate = p.PayrollEndDate.Value.Year >= 2016 行中的条件,因为它给我一个错误 Invalid cast from 'Boolean' to 'DateTime'.,我添加的代码是 return一个布尔值

var per = (from p in db.Periods select new { periodId = p.PeriodId, periodStart = p.StartDate, periodEnd = p.EndDate, payrollEndDate = p.PayrollEndDate.Value.Year >= 2016 });
var periods = (from p in per.AsEnumerable() select new { perId = p.periodId, PayrollEndDate = Convert.ToDateTime(p.payrollEndDate).ToShortDateString() }).AsQueryable();
ViewBag.PeriodEndDate = new SelectList(periods, "PayrollEndDate", "PayrollEndDate", null);

2016年以后怎么过?

select 用于投影,而不是过滤。听起来您想要一个 where 子句。我建议不要在这里使用查询表达式,因为你只是在做简单的事情:

var query = db.Periods
              .Where(p => p.PayrollEndDate != null &&
                          p.PayrollEndDate.Value.Year >= 2016)
              .AsEnumerable()
              .Select(p => new {
                  p.PeriodId,
                  PayrollEndDate = p.PayrollEndDate.Value.ToShortDateString()
              });

(我强烈怀疑您实际上并不希望在此处调用 AsQueryable()...这可能会给人留下 印象,即任何进一步的查询都将在数据库,但这将是一种错觉,因为您已经有了 AsEnumerable()。)

我已经删除了 Convert.ToDateTime 调用,因为我假设 p.PayrollEndDate.Value 已经是 DateTime