我有一个包含100个DateTime变量的列表,我想相互减去列表项,看它们是否相差5分钟。可以使用LINQ实现这一点。我想用i + 1,i + 2减去“i”,同样i + 1减去i + 2,i + 3 ..
for (var i = 0; i < nodeDetails.Count;i++ )
{
DateTime nodeTime1 = DateTimeOffset.Parse(gettime()).UtcDateTime;
for (var j = i+1; j <= hadoopNodeDetails.Count; j++)
{
DateTime nodeTime2 = DateTimeOffset.Parse(gettime()).UtcDateTime;
if (nodeTime2.Subtract(nodeTime1).TotalMinutes > 15)
return true;
}
}
答案 0 :(得分:2)
您可以使用LINQ查询从同一列表中选择两个日期,并Enumerable.Any
检查两者之间的时间跨度是否为5分钟或更长时间:
var diff5OrMore = from d1 in dateList
from d2 in dateList.Skip(1)
let diffMin = (d1 - d2).TotalMinutes
where diffMin >= 5
select new { d1, d2, diffMin };
bool anyDiff5OrMore = diff5OrMore.Any();
// bonus: output
if (anyDiff5OrMore)
{
foreach (var x in diff5OrMore)
System.Console.WriteLine("Date1:{0} Date2:{1} Minutes:{2}", x.d1, x.d2, x.diffMin);
}
答案 1 :(得分:0)
更多信息可能会有所帮助,但我想这可以做你想做的事情:
var result = <YourItems>
.Join(<YourItems>,
left => left.<YourDateTimeProperty>,
right => right.<YourDateTimeProperty>.AddMinutes(5),
(left, right) => new { Id1 = left.Id, Id2 = right.Id });
这会根据特定的 DateTime 列为您提供项目的ID,这些项目在5分钟内有所不同。