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 連接函數(shù)。
對于我的示例,我還使用了您的 SQL 查詢的更改版本,我認為它是相同的:
SELECT sweets.*, carts.Qty
FROM sweets LEFT JOIN carts ON sweets.SweetID = carts.SweetID
WHERE carts.CartID = '7125794e-38f4-4ec3-b016-cd8393346669'
然后我使用 JOIN 函數(shù)將這個新查詢轉換為 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函數(shù)生成一個復合對象列表,其中包含一個Sweet對象和一個Cart帶有每個列表條目的對象,因此您可以訪問sweetsCart.Cart.CartID或sweetsCart.Sweets.SweetID。
=>順便說一下,左側的名稱可以是您想要的任何名稱,它只是 LINQ 的標識符。我選擇稱它為“sweetsCart”。
帶有 SelectMany 的 GroupJoin 可以進行左連接。
- 3 回答
- 0 關注
- 200 瀏覽
添加回答
舉報