gpt4 book ai didi

c# - LINQ:根据最新时间按所选 ID 获取唯一行

转载 作者:行者123 更新时间:2023-12-04 10:34:09 24 4
gpt4 key购买 nike

我已经设法使用下面的当前语法连接到我的数据库并运行简单的 LINQ 查询。
我有一个包含大约 20 个唯一 SHIP_ID 的数据库,每 2 分钟获取一次有关所有船舶位置的更新信息。这意味着 SHIP_ID 和 TIMESTAMP 组合在一起是唯一的,并且我的数据库中有很多数据,所以我希望负载在 SQL 服务器上返回正确的数据。而不是客户端通过 20k 行的响应来找到我想要的值。

我想检索存储在数据库中的一组选择船舶的最后一个位置,假设船舶具有 SHIP_ID 的 1、2 和 3。截至目前,SHIP_ID 存储在字符串 [] 中。

            using (var scope = _scopeFactory.CreateScope())
{
var dbContext = scope.ServiceProvider.GetRequiredService<AisRecordContext>();
var query = dbContext.SimpleAisRecords
//LINQ statements goes here to get intended result
.Where ?
.GroupBy ?
.Select?
.OrderderByDecending ?

}

我怎样才能继续做出正确的 LINQ 语句来获取我想要的数据?我还希望结果具有它选择的整行作为数据,例如 LAT、LON、SPEED 和 HEADING,它们是我的其他一些列。

我也想知道返回结果的最佳格式是什么。结果将是返回的行,其中 TIMESTAMP 是我要调用的 SHIP_ID 的最新行。我将需要我的数据库具有的所有列(大约 15 列),因为我将在 map 中显示数据。
我会使用 ToList 吗?数组?或者以某种方式让我的查询成为结果而不在添加后修改它。

感谢您抽出宝贵时间(对于一个非常具体的问题,我很抱歉,找不到任何文章在最新 DATE 中按所选 ID 获得多行)

最佳答案

使这变得复杂的是,您希望检索多艘船具有最新时间戳的行。我认为这样做的唯一方法是为每个 SHIP_ID 发出请求,并用每个结果填充一个列表。

var lastLocations = new List<SimpleAisRecords>();
var shipIds = new string[] { "1", "2", "3" };

using (var scope = _scopeFactory.CreateScope())
{
var dbContext = scope.ServiceProvider.GetRequiredService<AisRecordContext>();
foreach (var shipId in shipIds)
{
// Gets records for a SHIP_ID, orders by newest to oldest, and then grabs the first (newest) record
var query = dbContext.SimpleAisRecords
.Where(ship => ship.SHIP_ID == shipId)
.OrderderByDecending(ship => ship.TIMESTAMP)
.FirstOrDefault();

if (query != null)
{
lastLocations.Add(query);
}
}
}

默认情况下,它将返回关联表中的所有列,因此您将拥有 LAT、LON、SPEED、HEADING 以及您需要的所有其他列。

关于c# - LINQ:根据最新时间按所选 ID 获取唯一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60267485/

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