2016-09-19 158 views
0

我正在嘗試將以下查詢與自加入轉換爲LINQ表達式。如何爲涉及自連接的多個連接編寫LINQ?

select r2.* from depends d 
    join request r on d.DESC =r.DESC 
    join request r2 on d.ID=r2.ID 
    and d.TYPE ='sometype' 
where r.ID= 12345 

如何更正以下LINQ查詢以匹配上述正確的SQL查詢?

var result = (from d in depends 
      join r in request on d.DESC equals r.DESC 
      join r2 in request on d.ID == r2.ID && d.TYPE == incomingType.ToString() 
      where r.ID == incomingId 
      select r2).AsEnumerable(); 
+0

首先,SQL查詢中沒有自連接,只有兩個連接到同一個表。其次,SQL查詢很奇怪且不一致,'d.TYPE ='sometype''和'r.ID = 12345'條件涉及單個表,因此應該簡單地放在'where'子句中。 –

回答

1

你爲什麼不使用簡單,如果你的incomingType一個Where條款是固定的?

也有多個語法加盟條件,如下所示:LINQ Joining in C# with multiple conditions

如:

var result = (from d in depends 
       where d.TYPE == incomingType.ToString() 
       join r in request on 
       new { ID = r.ID, desc = r.DESC } 
       equals 
       new { ID = d.ID, desc = d.DESC } 
       where r.ID == incomingId 
       select r).AsEnumerable(); 

如果incomingType實際上並不固定,它從depends表得到它的價值,你可以在連接條件中添加第三個參數,例如

var result = (from d in depends 
       where d.TYPE == incomingType.ToString() 
       join r in request on 
       new { ID = r.ID, desc = r.DESC, type = r.someType1 } 
       equals 
       new { ID = d.ID, desc = d.DESC, type = d.someType2 } 
       where r.ID == incomingId 
       select r).AsEnumerable();