2

私はアイテムのコレクションを持っています:

 class Item { 
      DateTime Start {get;set;}
      DateTime End {get;set;}
  }

開始日と終了日の例:09/08/2013

次のリストを作成する必要があります。(DateTime x - how many items with Start >x and End < x)

私はこれを行うことができます:

  list(DateTime x, int HowMany) results
  dayZero = Earliest start day
  dayFinal = Latest end day
  for (currentDay : dayZero to dayFinal)
       put (currentDay,Get How Many Items with start>currentDay, end<currentDay)

しかし、問題はアイテムが時間的に分散していることです。合計アイテム数を変更せずに、多くの日数のアイテム数を計算します。最良の解決策は、アイテムの最初と最後の日だけを反復することだと思いますが、よりパフォーマンスを高めるにはどうすればよいでしょうか?

私はlinqを使用しているので、次のものがあります:

protected readonly OL4RENTDb _context;
IQueryable<T> query = _context.Set<Item>();
query.Where <- ????
4

1 に答える 1

0
Enumerable.Range(0, 1 + end.Subtract(start).Days)
.Select(offset=>new {
     day=start.AddDays(offset),
     count=Items.Count(i=>i.Start<start.AddDays(offset) && 
     i.End>start.AddDays(offset)});

start=開始日、end=終了日、ItemsはItemのコレクションであることを考えると、うまくいくはずだと思います。

于 2013-06-09T06:09:16.040 に答える