如何在2016年之后开始?

时间:2016-10-17 05:49:54

标签: linq asp.net-mvc-3

我在下面的代码工作正常,没有行payrollEndDate = p.PayrollEndDate.Value.Year >= 2016中的条件,因为它给了我一个错误Invalid cast from 'Boolean' to 'DateTime'.,我添加的代码返回一个布尔值

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年开始?

1 个答案:

答案 0 :(得分:4)

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