0
我想知道如何使具有這些SQL查詢LINQ表達式爲左連接和內表濾波器
SELECT item.*, priceforitem.*
FROM
item
LEFT JOIN priceforitem
ON priceforitem.ItemID = item.ItemID
AND priceforitem.PriceID = ?PriceID
我使用它的方法查詢,但我不已經做出同樣的效果LINQ表達式「知道這是否會產生同樣的結果
db.Items
.GroupJoin(
db.PriceForItems.Where(pi => pi.PriceID == id),
i => i.ItemID,
pi => pi.ItemID,
(i, pi) => new { Item = b, Prices = pi })
.SelectMany(
a => a.Prices.DefaultIfEmpty(),
(i, pi) => new
{
ItemID = i.Item.ItemID,
Code = i.Item.Code,
Name = i.Item.Name,
PriceForItemID = pi.PriceForItemID,
Price = pi.Price
})
,然後思考了一段時間後,我縮短這樣
db.Items
.SelectMany(
i => db.PriceForItems.Where(
pi => pi.PriceID == id
&& pi.ItemID = i.ItemID).DefaultIfEmpty(),
(i, pi) => new
{
ItemID = i.Item.ItemID,
Code = i.Item.Code,
Name = i.Item.Name,
PriceForItemID = pi.PriceForItemID,
Price = pi.Price
})
我是Linq的新手,我不知道哪個更好,以及如何將其轉換爲Linq查詢語句。
我只是不確定'where t.PriceId == id'部分,它是否會通過過濾'temp'影響結果行,其'tempvals'爲空。 「where」的運算符優先級是否大於第二個「from」?我擔心它會有同樣的結果,如果我的第一個SQL查詢與最後的'AND priceforitem.PriceID =?PriceID'替換爲'WHERE priceforitem.PriceID =?PriceID'。 – qsoft
'tempments.template.DefaultIfEmpty()'中的t用於外連接,'when'用於過濾結果。 –