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'用于过滤结果。 –