2016-07-29 2 views
0

Я надеюсь, что я могу помочь мне, я новичок в linq, У меня есть 2 таблицы имя 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

Это звучит как случай для WHERE NOT EXISTS в SQL.

примерно переводится это должно быть что-то вроде этого в 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

Смежные вопросы