2014-01-13 72 views
0

我有一個SQL查詢,我試圖使用Lambda表達式將其轉換爲Linq。 我能夠對TABLE1.XR_ID和TABLE2.ID執行正常的聯接操作,但後來我意識到SQL查詢正在加入CHARINDEX。我做了一些研究,但是我無法找到任何資源讓我走向正確的方向。使用LAMBDA將SQL查詢中的CHARINDEX轉換爲LINQ表達式

SQL:

SELECT distinct a.XR_ID FROM 
TABLE1 a 
JOIN TABLE2 b ON CHARINDEX(CONVERT(VARCHAR(20), a.XR_ID), CONVERT(VARCHAR(20), B.ID), 1) = 1 
WHERE 
b.TYPE = 'Q' 

LINQ:

var innerQuery = 
      context.TABLE1. 
      Join(context.TABLE2, 
      table1 => table1.XR_ID, 
      table2=> table2.ID, 
      (table1 , table2) => 
       new 
       { 
       TABLE1 = table1 , 
       TABLE2 = table2 
       }) 
       .Where(y=> y.table2.TYPE == "Q") 
       .Distinct() 
       .ToList(); 

上面的查詢不給我相同的結果SQL查詢。任何一個人都可以指向正確的方向嗎?

回答

1

可以使用SqlFunctions ClassCharIndex方法產生CHARINDEX,但我不認爲你可以做你的something = 1聯接條件LINQ。

我認爲你應該做交叉連接並將你的條件移動到where條款。這就是爲什麼我會從以下開始:

var innerQuery = from t1 in context.Table1 
       from t2 in context.Table2 
       where SqlFunctions.CharIndex(
          SqlFunctions.StringConvert((double)table1.XR_ID), 
          SqlFunctions.StringConvert((double)table2.ID)) == 1 
        && t2.Type == "Q" 
       select new { Table1 = t1, Table2 = t2 } 
+0

感謝您的迴應..讓我試試這個..但我認爲這看起來像一個有效的選擇。 – Scorpio

+0

nope ..它給我結果相同的列表,因爲我的LINQ表達式不會在sql查詢中給出結果。 – Scorpio

+0

什麼結果?有錯誤嗎?你有沒有試過檢查生成的SQL語句? – MarcinJuraszek

相關問題