我正在將我的項目轉換爲使用EF並且還希望將存儲過程轉換爲Linq-to-entities查詢。SQL的Rownumber與Linq-to-entities
這是我的SQL查詢(簡版),我有麻煩轉換:
SELECT
CategoryID, Title as CategoryTitle,Description,
LastProductTitle,LastProductAddedDate
FROM
(
SELECT
C.CategoryID, C.Title,C.Description, C.Section,
P.Title as LastProductTitle, P.AddedDate as LastProductAddedDate,
ROW_NUMBER() OVER (PARTITION BY P.CategoryID ORDER BY P.AddedDate DESC) AS Num
FROM
Categories C
LEFT JOIN Products P ON P.CategoryID = C.CategoryID
) OuterSelect
WHERE
OuterSelect.Num = 1
在的話:我要回另外該產品的所有類別(從分類表)和標題和日期(來自產品表),最後添加到此類別中。
如何使用實體框架工作查詢來實現此目的?
以最有效的方式。
你想EF中的解決方案,還是你想要最有效的方法?最有效的方法是用SQL編寫它。如果不是使用CROSS APPLY的窗口函數,則可以比當前的方法更快。 – 2010-05-01 18:30:51
@Mark Byers,所以你建議把它作爲存儲過程嗎? 你可以請示出如何在這裏使用交叉應用? – mariki 2010-05-01 18:37:07
嗯,這取決於。你說你想在EF英孚提供解決方案,但你也表示你想要最有效的方法。如果您可以使用可行的解決方案,但可能不是最佳性能,那麼EF解決方案將會很好,並且更易於維護。 CROSS APPLY方法非常複雜 - 你可以在這裏閱讀:http://explainextended.com/2009/11/30/sql-server-selecting-records-holding-group-wise-maximum/。什麼是最好的也取決於你有多少行。如果你只有幾行,那麼表掃描可能是最快的方法。 – 2010-05-01 18:39:25