2016-10-17 5 views
2

それは私にエラーInvalid cast from 'Boolean' to 'DateTime'.を与え、私が追加されたコードは、年以降2016年を取るためにどのようにブール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); 

を返しているので、私はラインpayrollEndDate = p.PayrollEndDate.Value.Year >= 2016にW/O状態正常に動作し、以下のコードを持っていますか?

答えて

4

selectは、フィルタリング用ではありません。代わりにwhere句が必要なようです。 (私は強くあなたが実際にそこAsQueryable()コールを望んでいない疑いがある...それは印象を与えるかもしれ

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() 
       }); 

:私はあなただけの簡単な事をやっていることを考えると、ここでクエリ式を使用していないことをお勧めしたいです私はp.PayrollEndDate.ValueはすでにDateTimeであると仮定していますように私はConvert.ToDateTimeコールを削除しました)。それ以上のクエリがデータベースに行われますが、それはあなたがすでにAsEnumerable()を持っていることを考えると錯覚、あろうこと

+0

試してみよう... –

+0

感謝は魔法のように働く。 –

+0

オーダーで注文する方法は?申し訳ありませんが、ラムダの方法が分かりません –

関連する問題