2016-12-02 23 views
1

Folk,無法在選擇語句中使用連接時將SQL轉換爲LINQ

嘗試將以下SQL Server命令轉換爲LINQ。我已經驗證了SQL可以通過SSMS正確運行。

select top 100 tts.* from tblLCState tts 
INNER JOIN 
    (SELECT fldLCID, MAX(fldStateDate) AS Statedate 
    FROM tblLCState 
    GROUP BY fldLCID) grptts 
ON tts.fldLCID = grptts.fldLCID 
AND tts.fldStateDate = grptts.Statedate 
where fldLCStateCode = 1 
order by fldStateDate desc 

我很困惑如何將表tblLCState連接到select語句。我在LNIQfollows嘗試:

from tRow in tblLCState 
join irow2 in (from iRow in tblLCState 
    group iRow by iRow.fldLCID into g 
    select new {fldLCID = g.Key, MaxStateDate = (from t2 in g select t2.fldStateDate).Max()}) 
on ((tRow.fldStateDate = irow2.MaxStateDate) and (tRow.fldLCID = irow2.g.fldLCID)) 

的錯誤是對一個)的預期和操作員在條款上說。在這一點上,我還沒有嘗試過哪些地方/訂單/前100名。只是花了很多時間尋找這個表單或其他任何沒有運氣的聯合。我看過很多帖子加入另一張桌子,但不幸的是我沒有這種奢侈品。

任何幫助,將不勝感激。

感謝

湯姆D.

+2

在C#中,你需要使用''&&而不是'和' – stuartd

回答

1

LINQ

var result = (from tRow in tblLCState 
       join irow2 in (from iRow in tblLCState 
           group iRow by iRow.fldLCID into g 
           select new { fldLCID = g.Key, MaxStateDate = g.Max(k => k.fldStateDate) }) 
       on new { StateDate = tRow.fldStateDate, tRow.fldLCID } equals new { StateDate = irow2.MaxStateDate, irow2.fldLCID } 
       select tRow); 
+0

Selami .....在我linqpad運行良好(除了需要刪除最後一行中的.g。)之外,但是當我將它放入C#代碼中時出現錯誤。它出現編譯錯誤:錯誤\t CS1936 \t找不到源類型爲'tblLCState'的查詢模式的實現。找不到'GroupBy'。我已驗證我的代碼中有正確的使用指令。關於我沒有看到的任何想法? –

+0

@TomD確保項目中包含System.Data.Linq引用。 – selami

+0

@salami驗證該項目是否包含在項目中。所有其他linq代碼正在工作。 –