2016-06-30 5 views
1

私は以下のタスクを持っています - オブジェクトのリスト(時間セグメント)があります。 TimeSegment以下のタイプ:このセグメントは、以前Start.Date値によってグループ化されいくつかの条件によってアイテムのグループを取得する方法

class TimeSegment 
{ 
     public DateTime Start{get;set;} 
     public DateTime End{get;set;} 
} 

。私は各グループから、あるセメントのEnd.TimeOfDayが別の要素のStart.TimeOfDayと等しいセグメントを取得する必要があります。 LINQでこのようなことを行う方法はありますか?提案ありがとう。

+0

多分betあなたはもっとコードを投稿しますか? – tire0011

答えて

1

それを行うための一つの方法です:

は、グループを作成し、移入:

var group = new List<TimeSegment>(); 

group.Add(new TimeSegment() { Start = DateTime.Today.AddHours(1), End = DateTime.Today.AddHours(2) }); 
group.Add(new TimeSegment() { Start = DateTime.Today.AddHours(3), End = DateTime.Today.AddHours(4) }); 
group.Add(new TimeSegment() { Start = DateTime.Today.AddHours(4), End = DateTime.Today.AddHours(5) }); 
group.Add(new TimeSegment() { Start = DateTime.Today.AddHours(6), End = DateTime.Today.AddHours(7) }); 

は(開始時刻順)連続した時間セグメントを取得します。

var result = group.Where(t1 => group.Any(t2 => t2.End == t1.Start || t2.Start == t1.End)).OrderBy(t => t.Start).ToList(); 

See fiddle here.

+0

連続した時間セグメントが3つ以上ある場合はどうなりますか? –

+0

それはすべてそれを取るだろう。私は私の答えにフィドルへのリンクを追加しました。 –

+0

クール、ありがとう。異なるケースでテストしますか? –

0

これは何か?ここで

List<TimeSegment> times = db.TimeSegment.Where(t=>t.End.TimeOfDay.Equals(t.Start.Date)).ToList(); 
+0

は、1つのtimeSegmentの開始と終了を比較します。 –

関連する問題