我想在LINQ to改寫這個簡單MS SQL查詢SQL:的LINQ to SQL LEFT JOIN(或陳述)
SELECT * FROM Table1 T1
LEFT JOIN Table2 T2 ON T1.ID = T2.Table1ID OR T1.FirstName = T2.FirstName
如何重寫這個中的LINQ to SQL?
我想在LINQ to改寫這個簡單MS SQL查詢SQL:的LINQ to SQL LEFT JOIN(或陳述)
SELECT * FROM Table1 T1
LEFT JOIN Table2 T2 ON T1.ID = T2.Table1ID OR T1.FirstName = T2.FirstName
如何重寫這個中的LINQ to SQL?
試試這個,雖然我不知道LINQ到SQL如何將它傳送:
from t1 in ctx.Table1
from t2 in ctx.Table2
.Where(t => t1.ID == t.Table1ID ||
t1.FirstName == t.Firstname)
.DefaultIfEmpty()
select new {t1, t2}
你可以混合Linq lambda與常規Linq查詢嗎?這是非常酷的東西。儘管我的大腦很傷心看着它。 – MiniRagnarok
是的,謝謝@D Stanly – user746499
我不相信這樣做是可以做到的,因爲我認爲你不能完成連接的OR部分。你這樣做的方式在L2S加入將(大致)
join .. on
new {
T1.ID,
T1.FirstName
} equals new {
T2.Table1ID,
T2.FirstName
}
但這樣會同時匹配。
我認爲你可以做的唯一事情就是在那裏做某種子查詢。但這可能不是你想要的。 Sklivvz的建議可能是最好的。
這是一個內部連接。
from t1 in ctx.Table1
from t2 in ctx.Table2
where t1.ID == t2.Table1ID ||
t1.FirstName == t2.Firstname
select t1
爲了得到一個左連接,它看起來像你使用DefaultIfEmpty()
,每MSDN。
from t1 in ctx.Table1
from t2 in ctx.Table2.DefaultIfEmpty()
where t1.ID == t2.Table1ID ||
t1.FirstName == t2.Firstname
select t1
我認爲這將導致一個' INNER JOIN',不是'LEFT JOIN' –
@Dananley錯過了。是啊,你說得對。 – MiniRagnarok
這是交叉加入,我測試了它 – user746499
重複:http://stackoverflow.com/questions/695506/linq-left -join-group-by-count – Max
它不重複,看看只有一個條件加入 – user746499
http://msdn.microsoft.com/en-us/library/bb399403.aspx? – Sklivvz