如何编写此 LINQ 查询的 SQL 版本?
Posted
技术标签:
【中文标题】如何编写此 LINQ 查询的 SQL 版本?【英文标题】:How can I write an SQL version of this LINQ query? 【发布时间】:2010-11-17 19:58:50 【问题描述】:如图:How to limit an SQL query to return at most one of something?
我有以下表格:
平台
平台ID 姓名产品
产品ID 姓名发布
身份证 产品ID 平台ID 版本 发布日期版本表存储特定平台的软件产品的每个版本。我想编写一个查询来返回 Releases 表中每个平台的每个产品的最新版本。 IE。如果我在平台 A、B 和 C 上发布产品 X 版本 2.0,Release 表中将有 3 条记录:
2010 年 11 月 17 日发布的平台 A 上的产品 X 2.0 版 2010 年 11 月 17 日发布的平台 B 上的产品 X 2.0 版 2010 年 11 月 17 日发布的平台 C 上的产品 X 2.0 版那么,给定一个产品 ID,我如何获取此信息?我尝试像我使用的 LINQ 解决方案一样使用 GROUP BY,但显然我不能像 .NET 一样将 LINQ 转换为 SQL。
【问题讨论】:
【参考方案1】:迂腐的:
Select
PR.Name,
PL.Name,
REL.Version,
REL.ReleaseDate
From
Releases As REL
Inner Join Products As PR
On REL.ProductID = PR.ProductID
Inner Join Platforms As PL
On REL.PlatformID = PL.PlatformID
Where
REL.ID = (Select Top 1 Latest.ID
From Releases As Latest
Where Latest.PlatformID = REL.PlatformID
And Latest.ProductID = REL.ProductID
Order By Latest.ReleaseDate Desc)
也应该有效(假设您从不减少版本):
Select
PR.Name,
PL.Name,
Max(REL.Version),
Max(REL.ReleaseDate)
From
Releases As REL
Inner Join Products As PR
On REL.ProductID = PR.ProductID
Inner Join Platforms As PL
On REL.PlatformID = PL.PlatformID
Group By
PR.Name,
PL.Name
【讨论】:
非常感谢,第一个解决方案很完美。第二个不适合,因为我对版本使用Major.Minor.Maintenance.Build
语法,所以我认为 MAX()
不会正确处理。【参考方案2】:
你知道 LINQ 的 DataContext 类有一个Log property吗?
既然您已经有了一个 LINQ 查询,为什么不偷偷看看呢? :-)
【讨论】:
以上是关于如何编写此 LINQ 查询的 SQL 版本?的主要内容,如果未能解决你的问题,请参考以下文章