如何从2016年开始?

问题描述:

下面我有,因为它给了我一个错误Invalid cast from 'Boolean' to 'DateTime'.和我添加的代码是一个布尔如何从2016年开始?

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年起如何利用返回线路payrollEndDate = p.PayrollEndDate.Value.Year >= 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()通话有...这可能会给印象

因为我假设p.PayrollEndDate.Value我已经删除了Convert.ToDateTime呼叫任何进一步的查询将在数据库中进行,但这是一种错觉,因为你已经有了AsEnumerable()了。)已经是一个DateTime

+0

会尝试它... –

+0

感谢像魔术般的作品。 –

+0

如何按顺序排序?对不起,我不知道如何使用lambda –