2013-03-25 127 views
-4

我有一個工作的sql語句,並希望它作爲linq語句或linq methode鏈。將sql語句翻譯成linq

我的說法是:

SELECT T1.* 
    FROM (SELECT Col1, MAX(InsertDate) as Data 
     FROM Zugbewegungsdaten 
     GROUP BY Loknummer) as temp JOIN T1 
    ON (T1.Col1= temp.Col1 
     AND Zugbewegungsdaten.InsertDate= temp.Date) 
    WHERE Col3=1 
ORDER BY Loknummer 

任何人可以幫我翻譯嗎?評論後

編輯:

好吧,我的結果對內部的選擇:

var maxResult = (from data in context.T1 
       group data by data.Col1 
       into groups 
       select new 
         { 
         Train = groups.Key, 
         InsertDate= groups.Max(arg => arg.InsertDate) 
         }) ; 

我嘗試了加入這樣的:

var joinedResult = from data in context.T1 
        join gdata in maxResult on new 
         { 
          data.Col1, 
          data.InsertDate 
         } 
         equals new 
         { 
          gdata.Col1, 
          gdata.InsertDate 
         } 
        select data; 

但我得到一個編譯器錯誤通過類型參數無效的連接。

在聯接工作的情況下,我會使用where來篩選joinedResult。

  var result = from data in joinedResult 
         where data.Col3 == true 
         select data; 
+1

如果你自己先嚐試某些東西,向我們展示並告訴我們它有什麼問題,那會更好。就像那樣,你將能夠從我們的答案中學習。如果我們只是給你提供解決方案,下次必須翻譯SQL查詢時,你必須回來。 -1表示沒有努力。 – 2013-03-25 10:25:02

+0

感謝您的評論,我添加了我的wip-code。 – Sukram 2013-03-25 14:46:37

回答

0

經過更多的「嘗試和錯誤」,我得到這個版本,它看起來像它的作品。

var joinedResult = ((from data in context.T1 
          group data by data.Col1 
          into g 
          select new 
           { 
           Key= g.Key, 
           Date = g.Max(p => p.InsertDate) 
           })).Join(context.T1, 
              temp => new 
              { 
               Key = temp.Key, 
               InsertDate = temp.Date 
              }, 
              data => new 
              { 
               Key = data.Col1, 
               InsertDate = data.InsertDate 
              }, 
              (temp, 
              data) => new 
               { 
               temp, 
               data 
               }) 
            .Where(arg => arg.data.Col3) 
            .OrderBy(arg => arg.data.Col1) 
            .Select(arg => arg.data); 

難道是我必須通過多列連接設置相同的屬性名稱(Key,InsertDate)嗎?

+0

「難道我必須通過多列連接來設置相同的屬性名稱(Key,InsertDate)嗎?」 - 是的。引擎應該如何與列匹配? – 2013-03-25 14:51:41