2017-01-17 6 views
-2

StartTimeの列がDateTimeのタイプのテーブルがあります。 2つの行の間に10分以下がある場合は、2つの行を競合と見なす必要があります。私が知りたいのは、その競合をチェックし、linqクエリでそれらを表示することです。Linqクエリを使用して競合を見つける

var diffs = from x in times 
      from y in times 
      select (x - y).TotalMinutes; 

return diffs.Any(x => x < 10); 

(これは乗の時間であるが)のn-LOGN時間のために、その後、比較pair-最初にソートする方が良いだろう:私は多分やるだろう任意の助け

+1

私たちはあなたを助けることができるように、いくつかのコードを表示してください。例えば、dbから抽出する必要のあるものをいくつか表示する –

答えて

2

ため

感謝LINQはそれを少し残忍にするでしょう。

0

この場合、Linqは最良の方法ではありません。おそらくforループを作成する方が良いでしょう。しかしコードはここにあります

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Data; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      DataTable dt = new DataTable(); 
      dt.Columns.Add("time", typeof(DateTime)); 

      dt.Rows.Add(new object[] { new DateTime(2017, 1, 1, 1, 0, 0) }); 
      dt.Rows.Add(new object[] { new DateTime(2017, 1, 1, 1, 5, 0) }); 
      dt.Rows.Add(new object[] { new DateTime(2017, 1, 1, 1, 20, 0) }); 
      dt.Rows.Add(new object[] { new DateTime(2017, 1, 1, 1, 25, 0) }); 
      dt.Rows.Add(new object[] { new DateTime(2017, 1, 1, 1, 30, 0) }); 
      dt.Rows.Add(new object[] { new DateTime(2017, 1, 1, 1, 40, 0) }); 
      dt.Rows.Add(new object[] { new DateTime(2017, 1, 1, 1, 45, 0) }); 
      dt.Rows.Add(new object[] { new DateTime(2017, 1, 1, 1, 50, 0) }); 
      dt.Rows.Add(new object[] { new DateTime(2017, 1, 1, 1, 56, 0) }); 
      dt.Rows.Add(new object[] { new DateTime(2017, 1, 1, 1, 58, 0) }); 

      List<DateTime> times = dt.AsEnumerable().Where((x, i) => (i > 0) && (x.Field<DateTime>("time") - dt.Rows[i - 1].Field<DateTime>("time")).TotalMinutes < 10).Select(x => x.Field<DateTime>("time")).ToList(); 

     } 
    } 
}