2016-07-29 78 views
0

我希望能夠幫助我,我是linq中的新手, 我有兩個表名tblcart和tblorderdetail: 我只是在這兩個表中顯示一些字段以顯示我的問題:在特殊情況下在linq中加入兩張表

tblCart: ID, CartID, 條碼,

和tblOrderDetail: ID, CartID, IsCompleted 條碼

當有人保存的訂單,他證實了他的請求前,一排臨時進入tblCart, 那麼如果他或她證實了他的請求的另一個行將被插入到tblOrderDetail,

現在我想不顯示插入到tblOrderDetailed中的行(僅顯示臨時存在於tblCart中的行),

換句話說,如果tblCart中有cartid = 1的行,並且同時存在與CartID = 1相同的行在tblOrderDetail中,那麼我不想要那個行。

總而言之,只有tblOrderDetail中沒有的行,並且要實現這一點的字段是CartID, 我應該提到,我使Iscompleted = true,並且可以排除我們不想要的行,

我這樣做:

var cartItems = context.tblCarts 
    .Join(context.tblSiteOrderDetails, 
     w => w.CartID, 
     orderDetail => orderDetail.cartID, 
     (w,orderDetail) => new{w,orderDetail}) 
    .Where(a=>a.orderDetail.cartID !=a.w.CartID) 
    .ToList() 

但是它不工作。

一個例子:

tblCart: 
ID=1 
CartID=1213 
Barcode=4567 

ID=2 
CartID=1214 
Barcode=4567 

ID=3 
CartID=1215 
Barcode=6576 

tblOrderDetail: 
ID=2 
CartID=1213 
Barcode=4567 
IsCompleted=true 

這些數據應該只是顯示在tblCart最後兩行,我的意思是

ID=2 
CartID=1214 
Barcode=4567 

ID=3 
CartID=1215 
Barcode=6576 
+1

你能爲每個表提供一些示例行,然後使用這些行查詢輸出示例嗎? – pquest

+0

@pquest yup ofcurse – sariiia

+0

請將購物車的型號添加到您的問題 - 具體而言,您是否有購物車上的導航屬性以引用詳細信息? –

回答

0

這聽起來像是在SQL WHERE NOT EXISTS的情況下。

大致翻譯這應該是這樣的LINQ:

var cartItems = context.tblCarts.Where(crt => !context.tblSiteOrderDetails.Any(od => od.CartID == crt.cartID)); 
+0

謝謝,我真正在尋找的東西,像一個魅力 – sariiia

0

如果你有車的導航屬性引用的細節(我假設它叫Details),則:

var results=context.tblCarts.Where(c=>!c.Details.Any(d=>d.IsCompleted)); 
+0

我測試了您的解決方案,這是我的第二個解決方案,因爲我有兩個領域來跟蹤我的問題,謝謝非常 – sariiia