2012-12-30 71 views
3

我有数据系列,其中每个成员包含一些元素,每个元素都有浮点变量D,表示OADate(excel格式)中的日期。我需要找出,如果任何系列与“邻居”相交。所以结果是一个布尔。 有什么办法可以在LINQ中做到这一点? 这是我目前工作的代码LINQ从多行的条件中选择一个bool

  bool overlaps = false; 
     for (int i = 0; i < series.Count-1; i++) { 
      if (series[i].elements.Last().D > series[i + 1].elements.First().D) { 
       overlaps = true; 
       break; 
      }   
     } 

感谢:-)

回答

4
series.Skip(1) 
     .Where((s,i) => series[i].elements.Last().D > s.elements.First().D).Any(); 

说明:因此,我们跳过第一个元素,那么series[i]实际上将是相同的样品中series[i],并s将项目索引号为series[i+1]

+0

+1(s,i)这是我第一次看到它:) –

+0

@MSakherSawan是的,有选择,在哪里,SkipWhile和TakeWhile运算符的重载索引参数 –

+0

我立即得到它,并需要它几十次! –

1
series.Zip(series.Skip(1).Concat(series.Take(1)), (a, b) => 
     new { a = a, b = b }) 
     .Any(c=>c.a.elements.Last().D > c.b.elements.First().D); 

荏苒series自身由一个圆形,然后用旋转一个相应的一个比较主要series的项目!

+0

我的那个呢,它的工作? :) –