gpt4 book ai didi

c# - LINQ 选择相隔 X 分钟的记录

转载 作者:行者123 更新时间:2023-11-30 13:00:20 25 4
gpt4 key购买 nike

我有一个简单的表格来跟踪输入日期。我想选择相隔 X 分钟的记录。

IMAGE_LOCATION  IMAGE DATE
============== =============
2227.jpg 08/03/2014 22:27:47
2228.jpg 08/03/2014 22:28:48
2229.jpg 08/03/2014 22:59:49
2230.jpg 08/03/2014 23:12:50
2231.jpg 08/03/2014 23:29:49

在上面的示例中,我希望查询返回至少相隔 X 分钟的项目,比方说 30 分钟。因此,从上面的列表中,2227.jpg、2229.jpg 和 2231.jpg 将只返回。

这是我目前所拥有的,它只返回最新的图像,但是我需要最新的图像,但记录之间至少间隔 30 分钟。

using (var db = new GibFrontierEntities())
{
var result = (from u in db.CCTV_IMAGES.OrderByDescending(u => u.ImageDate)
select u).Take(rows);
return result.ToList();
}

最佳答案

这是实现您所要求的一个 LINQ 解决方案(经过测试并在 .NET 4 中工作)的快速尝试:

var list = db.CCTV_IMAGES.OrderByDescending(u => u.ImageDate);
return list.Where((d, i) =>
{
//Look ahead to compare against the next if it exists.
if (list.ElementAtOrDefault(i + 1) != null)
{
return d.ImageDate.Subtract(list.ElementAtOrDefault(i + 1).ImageDate).TotalMinutes > 30;
}

//Look behind to compare against the previous if this is the last item in the list.
if (list.ElementAtOrDefault(i - 1) != null)
{
return list.ElementAtOrDefault(i - 1).ImageDate.Subtract(d.ImageDate).TotalMinutes > 30;
}

return false;
}).ToList();

根据评论和更清晰的要求定义:

因为您在下面的评论中声明您将每分钟获取 1 个项目,并且您之前声明您需要将它们分开至少 30 分钟,您是否会考虑简化逻辑以每 30 分钟获取一次列表中的项目?

return list.Where((d, i) => i % 30 == 0);

关于c# - LINQ 选择相隔 X 分钟的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22326418/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com