gpt4 book ai didi

c# - 将 sql select 转换为 LINQ

转载 作者:太空宇宙 更新时间:2023-11-03 16:24:22 25 4
gpt4 key购买 nike

我有以下 SQL 查询:

SELECT      Devices.*
, DevicesActivityData.*
FROM Devices
INNER JOIN DevicesActivityData
ON Devices.ID = DevicesActivityData.DeviceID
WHERE DevicesActivityData.DeviceDateTime IN (
SELECT MAX(DevicesActivityData.DeviceDateTime) AS MaxDate
FROM DevicesActivityData
GROUP BY DevicesActivityData.DeviceID
)

我需要完成我的代码:

var Q = db.Devices.Join(
db.DevicesActivityDatas,
d => d.ID,
a => a.DeviceID,
(d, a) => new { d.ID,d.DeviceName,a.DeviceDateTime }
);

我在最后一部分选择最大值时遇到问题

我怎样才能将这部分添加到我的查询....

[where DevicesActivityData.DeviceDateTime in ( select max(DevicesActivityData.DeviceDateTime) as MaxDate from DevicesActivityData group by DevicesActivityData.DeviceID )]

最佳答案

首先创建选择最大日期的查询:

var maxDates = db.DevicesActivityDatas
.GroupBy(d => d.DeviceID)
.Select(g => g.Max(t => t.DeviceDateTime));

然后做:

 var Q = db.Devices.Join(db.DevicesActivityDatas
.Where(m => maxDates.Contains(m.DeviceDateTime)),
d => d.ID, a => a.DeviceID,
(d, a) => new { d.ID,d.DeviceName,a.DeviceDateTime});

延迟执行将使两个查询作为一个查询运行。

作为旁注,我想指出逻辑可能不正确。在我看来,您想要一个设备列表,其中包含具有最新日期的 DevicesActivityData。但是最大日期不再与设备相关,它只是任意日期的列表。因此,一个设备可以有更多的 DevicesActivityData 记录,其日期与所收集的日期之一相匹配。我认为您需要查找具有该特定设备的最大日期的 DevicesActivityData 记录。

关于c# - 将 sql select 转换为 LINQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13023308/

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