0

私はこのLINQクエリを持っています:

var resourcePlanningInWeek = resourcePlanning.Where(rp => rp.PlanDate >= dateFrom && rp.PlanDate <= dateTo);
var holidays = new HolidayManager().GetByPeriod(dateFrom, dateTo);
var resourcePlanningExcludedHolidays= resourcePlanningInWeek.Where(rpiw => ( holidays.Where(h => h.HolidayDate = rpiw.PlanDate).Count = 0))

実行すると、次のエラーが発生します。

タイプ「DateTime」を「bool」に暗黙的に変換することはできません

誰かが理由を知っていますか?

4

2 に答える 2

2
  1. 比較したいとき==の代わりに使う必要があります。=これは、最後の行の2つの場所に関連しています。
  2. の呼び出しにCount括弧がありません。
var resourcePlanningExcludedHolidays = resourcePlanningInWeek
    .Where(rpiw => holidays.Where(h => h.HolidayDate == rpiw.PlanDate)
                           .Count() == 0);

ただし、これを書くためのより良い方法があります:

var resourcePlanningExcludedHolidays = resourcePlanningInWeek
    .Where(rpiw => !holidays.Any(h => h.HolidayDate == rpiw.PlanDate));

これはより良い理由です:

  1. 短くて読みやすい
  2. holidays条件が最初に真になるとすぐに列挙を停止します。Count()常に完全なリストを列挙します。

さらに良いアプローチは、HashSet<DateTime>:を使用することです。

var holidays
    = new HashSet<DateTime>(new HolidayManager().GetByPeriod(dateFrom, dateTo)
                                                .Select(x => x.HolidayDate));

var resourcePlanningExcludedHolidays
    = resourcePlanningInWeek.Where(rpiw => !holidays.Contains(rpiw.PlanDate));
于 2012-12-05T12:36:42.733 に答える
1

次の場所で等号がありません。

h.HolidayDate = rpiw.PlanDate

そのはず:

var resourcePlanningExcludedHolidays= 
      resourcePlanningInWeek.Where(rpiw => ( holidays.Where(h => h.HolidayDate == rpiw.PlanDate).Count = 0))
于 2012-12-05T12:30:06.400 に答える