3 回答
TA贡献1830条经验 获得超3个赞
以下将起作用
from sweet in db.Sweets
join cart in db.Carts
on sweet.SweetID equals cart.SweetID into swct
from sc in swct.DefaultIfEmpty()
select new { Sweet = sweet, Qty = sweet.Key == sc.Key ? sc.Qty : 0 }
TA贡献1799条经验 获得超6个赞
您应该使用 LINQ 连接函数。
对于我的示例,我还使用了您的 SQL 查询的更改版本,我认为它是相同的:
SELECT sweets.*, carts.Qty
FROM sweets LEFT JOIN carts ON sweets.SweetID = carts.SweetID
WHERE carts.CartID = '7125794e-38f4-4ec3-b016-cd8393346669'
然后我使用 JOIN 函数将这个新查询转换为 LINQ。
var cartId = '7125794e-38f4-4ec3-b016-cd8393346669'
var query = db.Sweets // table in the "from" statement
.GroupJoin(db.Carts, // all carts for that sweet will be joined into [sweets -> Cart[]]
cart => cart.SweetID, // the first part of the "on" clause in an sql "join" statement
sweet => sweet.SweetID, // the second part of the "on" clause)
(sweet, carts) => new { Sweet = sweet, Carts = cart }) // create new compound object
.SelectMany(
sweetsCarts => sweetsCart.Carts.DefaultIfEmpty(), //show the sweet even if there is no cart
(x,y) => new { Sweet = x.Sweet, Cart = y });
.Where(sweetsCart => sweetsCart.Cart.CartID == cartId); // restrict your cartID
基本上,该Join函数生成一个复合对象列表,其中包含一个Sweet对象和一个Cart带有每个列表条目的对象,因此您可以访问sweetsCart.Cart.CartID或sweetsCart.Sweets.SweetID。
=>顺便说一下,左侧的名称可以是您想要的任何名称,它只是 LINQ 的标识符。我选择称它为“sweetsCart”。
带有 SelectMany 的 GroupJoin 可以进行左连接。
- 3 回答
- 0 关注
- 178 浏览
添加回答
举报