2016-10-17 50 views
2

下面我有,因爲它給了我一個錯誤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瓦特/做工精細Ø條件這段代碼?

回答

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()通話有...這可能會給印象

因爲我假設p.PayrollEndDate.Value我已經刪除了Convert.ToDateTime呼叫任何進一步的查詢將在數據庫中進行,但這是一種錯覺,因爲你已經有了AsEnumerable()了。)已經是一個DateTime

+0

會嘗試它... –

+0

感謝像魔術般的作品。 –

+0

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