代码之家  ›  专栏  ›  技术社区  ›  Jake Petroules

如何编写此Linq查询的SQL版本?

  •  0
  • Jake Petroules  · 技术社区  · 15 年前

    如图所示: How to limit an SQL query to return at most one of something?

    我有以下表格:

    平台

    • 平台状
    • 名字

    产品

    • 产品ID
    • 名字

    发布

    • 身份证件
    • 产品ID
    • 平台状
    • 版本
    • 释放日期

    releases表存储特定平台的软件产品的每个版本。我想编写一个查询来返回releases表中每个平台的每个产品的最新版本。例如,如果我在平台A、B和C上发布产品X版本2.0,那么发布表中将有3条记录:

    • 2010-11-17发布的平台A上的产品X版本2.0一个
    • 2010-11-17发布的平台B上的产品X版本2.0一个
    • 2010-11-17发布的平台C上的产品X版本2.0一个

    那么,给定一个产品ID,我如何获得这个信息?我尝试使用GroupBy,就像我使用的Linq解决方案一样,但显然我不能像.NET那样将Linq转换为SQL。

    2 回复  |  直到 15 年前
        1
  •  2
  •   Stu    15 年前

    学究的:

    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
    
        2
  •  2
  •   VVS    15 年前

    你知道Linq的DataContext类有一个 Log property ?

    既然你已经有了一个LINQ查询,为什么不躲在窗帘后面看呢?-)