gpt4 book ai didi

c# - LINQ 使用列表从数据库中选择最后且唯一的记录

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

我有一张表,其中所有车辆都已注册,还有另一张表,其中每辆注册车辆都有数百万次 ping。

我正在尝试使用 LINQ QUERY 从过去 30 分钟内发送 ping 的每辆车中选择最后一个 ping。我已经通过“for each”的想法完成了下面的代码,但我不确定这是否是最好的方法。

我想知道是否有更好的方法使用单行选择这个?我知道我可以通过 vehicle_fleetNumber 对它们进行“分组”,但我无法获得正确的结果,因为 TAKE() 限制了最终结果。

var timeRestriction = DateTime.UtcNow.AddMinutes(-30);
var x = _db.Vehicles.Where(r=> r.isActive.Equals(true) && r.helperLastPing > timeRestriction);

foreach (var vehicle in x)
{
var firstOrDefault = _db.Tracks.OrderByDescending(r => r.collectedOn)
.FirstOrDefault(r => r.vehicle_fleetNumber.Equals(vehicle.fleetNumber));
}

return View();

谢谢,

最佳答案

是的,您应该通过连接两个表并使用 GroupBy 在数据库中执行此操作:

var query = from v in _db.Vehicles
join t in _db.Tracks
on v.fleetNumber equals t.vehicle_fleetNumber
where v.isActive && v.helperLastPing > timeRestriction
group t by t.vehicle_fleetNumber into vehicleGroup
select vehicleGroup.OrderByDescending(x => x.collectedOn).First();

foreach(var track in query)
{
// ...
}

除了 foreach 你还可以使用 query.ToArrayToList,我不知道你想用它做什么.

关于c# - LINQ 使用列表从数据库中选择最后且唯一的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39096472/

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