Я хочу знать, как сделать выражение Linq, который имеет тот же эффект, как эта SQL запросLinq выражения для левого соединения и фильтр для внутренней таблицы
SELECT item.*, priceforitem.*
FROM
item
LEFT JOIN priceforitem
ON priceforitem.ItemID = item.ItemID
AND priceforitem.PriceID = ?PriceID
Я уже сделать это с помощью запроса метода, но я не «т знаю, если он будет производить тот же результат
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', будет ли он влиять на результирующие строки, отфильтровывая' t', 'tempvals' пуст. Является ли приоритет оператора 'where' больше, чем второй' from'? Я боюсь, что он будет иметь тот же результат, что и мой первый SQL-запрос с последним 'AND priceforitem.PriceID =? PriceID' заменен на' WHERE priceforitem.PriceID =? PriceID'. – qsoft
'from t in tempvals.DefaultIfEmpty()' используется для внешнего соединения, а 'when' используется для фильтрации результата. –