gpt4 book ai didi

c# - Linq 在选择中选择

转载 作者:行者123 更新时间:2023-11-29 01:15:53 24 4
gpt4 key购买 nike

我正在努力将 MySQL 查询转换为 C# 中的 linq 语法(用于 Entity Framework )。 MySQL 查询如下所示:

SELECT *
FROM Availability as tableData
WHERE ID = (
SELECT Availability.ID
FROM Availability
WHERE Availability.FrameID = tableData.FrameID
ORDER BY Availability.Date DESC limit 1)

我不知道如何转换这部分 FROM table AS someName

到目前为止,我唯一的解决方案是执行原始 SQL 查询,例如:

dataContext.Availability.SqlQuery("SELECT * FROM Availability as tableData WHERE ID = (SELECT ID FROM Availability WHERE FrameID = tableData.FrameID ORDER BY Availability.Date DESC limit 1)").ToArray();

但如果知道 linq 是否可以提供这样的查询,那就太好了。

提前感谢您的回答!

最佳答案

如果你只需要每个帧id的最新记录,那么使用分组:

dataContext.Availability
.GroupBy(a => a.FrameID)
.Select(g => g.OrderByDescending(a => a.Date).FirstOrDefault());

此查询会产生所需的结果,但生成的 sql 会略有不同。看起来像

SELECT /* limit1 fields */
FROM (
SELECT DISTINCT tableData.FrameID
FROM Availability as tableData) AS distinct1
OUTER APPLY (
SELECT TOP(1) /* project1 fields */
FROM (SELECT /* extent1 fields */
FROM Availability AS extent1
WHERE Availability.FrameID = distinct1.FrameID) AS project1
ORDER BY project1.Date DESC) AS limit1

注意:EF 不支持 First() 扩展

关于c# - Linq 在选择中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41830776/

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