如何从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
。
下面这段代码工作正常 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
。