在特殊条件下加入 linq 中的两个表
join two tables in linq with special conditions
我希望有人能帮助我,我是linq的新手,
我有 2 个表名称 tblcart 和 tblorderdetail:
我只是在这两个表中显示一些字段来说明我的问题是什么:
tblCart:
ID,
车号,
条形码,
和 tblOrderDetail:
ID,
车号,
完成了
条形码
当某人保存订单时,在他确认他的请求之前,一行暂时进入tblCart,
那么如果他或她确认他的请求,另一行将被插入到 tblOrderDetail 中,
现在我不想显示插入到 tblOrderDetailed 中的行(只显示 tblCart 中的临时行),
换句话说,如果在 tblCart 中有 cartID=1 的行,同时在 tblOrderDetail 中有 CartID=1 的同一行,那么我不想要那个行。
总而言之,只是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
这听起来像是 sql 中 WHERE NOT EXISTS
的情况。
粗略翻译一下,在 LINQ 中应该是这样的:
var cartItems = context.tblCarts.Where(crt => !context.tblSiteOrderDetails.Any(od => od.CartID == crt.cartID));
如果您在购物车上有导航 属性 以参考详细信息(我假设它叫做 Details
),那么:
var results=context.tblCarts.Where(c=>!c.Details.Any(d=>d.IsCompleted));
我希望有人能帮助我,我是linq的新手, 我有 2 个表名称 tblcart 和 tblorderdetail: 我只是在这两个表中显示一些字段来说明我的问题是什么:
tblCart: ID, 车号, 条形码,
和 tblOrderDetail: ID, 车号, 完成了 条形码
当某人保存订单时,在他确认他的请求之前,一行暂时进入tblCart, 那么如果他或她确认他的请求,另一行将被插入到 tblOrderDetail 中,
现在我不想显示插入到 tblOrderDetailed 中的行(只显示 tblCart 中的临时行),
换句话说,如果在 tblCart 中有 cartID=1 的行,同时在 tblOrderDetail 中有 CartID=1 的同一行,那么我不想要那个行。
总而言之,只是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
这听起来像是 sql 中 WHERE NOT EXISTS
的情况。
粗略翻译一下,在 LINQ 中应该是这样的:
var cartItems = context.tblCarts.Where(crt => !context.tblSiteOrderDetails.Any(od => od.CartID == crt.cartID));
如果您在购物车上有导航 属性 以参考详细信息(我假设它叫做 Details
),那么:
var results=context.tblCarts.Where(c=>!c.Details.Any(d=>d.IsCompleted));