2010-11-17 57 views
0

截至所示:How to limit an SQL query to return at most one of something?如何編寫此版本的LINQ查詢?

我有以下表格:

平臺

  • PlatformID
  • 名稱

產品

  • 的ProductID
  • 名稱

發佈

  • ID
  • 的ProductID
  • PlatformID
  • 版本
  • RELEASEDATE

版本表存儲特定平臺的軟件產品的每個版本。我想編寫一個查詢來爲Releases表中的每個平臺返回每個產品的最新版本。 I.E.如果我的平臺上A,B和C發佈產品X 2.0版,將有3條記錄中發佈表:

  • 一個平臺上的產品X版本2.0 2010-11-17
  • 發佈一個對B平臺產品X版本2.0的平臺C對2010-11-17
  • 一個發佈的產品X版本2.0發佈於2010-11-17

所以,對於一個產品ID,怎麼辦我獲得這些信息?我嘗試使用GROUP BY,就像我使用的LINQ解決方案,但顯然我不能將LINQ to SQL和.NET一起翻譯。

回答

2

迂腐:

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 
+0

非常感謝你,第一個解決方案是完美的。第二個是不適合的,因爲我使用'Major.Minor.Maintenance.Build'語法的版本,所以我不認爲MAX()會正確處理。 – 2010-11-17 20:36:08

2

你知道LINQ的DataContext類具有Log property

由於您已經有了LINQ查詢,爲什麼不在窗簾背後偷看呢? :-)

+0

不錯,謝謝你的提示。 – 2010-11-17 20:34:44