2010-11-22 190 views
6

我正在尋找一些幫助將以下SQL查詢轉換爲LINQ到C#中的實體。將SQL查詢(與相關子查詢)轉換爲LINQ在C#

SELECT f.FundId, u.UnitValue 
FROM Fund f 
INNER JOIN FundUnit u ON f.FundId= u.FundId 
WHERE u.EffectiveDate = (SELECT MAX(effectivedate) 
         FROM FundUnit k 
         WHERE u.FundId = k.FundId) 
AND f.Active = 1 
ORDER BY f.FundId 

該查詢讀取數據庫中的所有活動資金及其最新單位值。基金錶中包含每個基金的記錄。 FundUnit表格包含每個日期每個基金的單位價值記錄。先前日期的單位值也保留在表格中以保留歷史記錄。

並非所有基金每天都會獲得新的單位價值,因此所有基金的最新生效日期不一定相同。因此,需要將max(effectivedate)函數應用於需要針對每個基金應用的單位表 - 因此是相關的子查詢。

感謝

回答

6

爲了回答這個問題,我將不得不承擔起你的實體的名稱。

SELECT f.FundId,u.UnitValue FROM基金 ˚FINNER JOIN FundUnit U ON f.FundId = u.FundId WHERE u.EffectiveDate = (SELECT MAX(EFFECTIVEDATE) FROM FundUnitķ 其中U .FundId = k.FundId)AND f.Active = 1 ORDER BY f.FundId

我將假設一個基金實體和實體FundUnit,就像例子。

var query = from f in Fund 
      from u in FundUnit 
      where f.FundId == u.FundId 
      && u.EffectiveDate == (from k in FundUnit 
            where u.FundId = k.FundId 
            select EffectiveDate).Max() 
      && f.Active == 1 
      select new { Id = f.FundId, EffectiveDate = u.EffectiveDate } // Add any fields you need 
      order by f.FundId 

我做了所有這些從內存中沒有測試它,可能會有一些小問題。如果我有時間,我會測試它。

0

我認爲這應該幫助:directly execute sql strings

+0

對不起,我看到它是linq的實體。相同的原則適用:http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx – Kell 2010-11-22 17:26:41