2016-10-17 9 views
2

У меня есть этот код, работает нормально без условия в линии payrollEndDate = p.PayrollEndDate.Value.Year >= 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 год года?

ответ

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 ,

+0

gonna try it ... –

+0

Спасибо, что работает как волшебство. –

+0

Как заказать заказчиком в порядке? извините, я не знаю, как лямбда –

Смежные вопросы