如何使用linq连接两个数据表。我想退回所有带有取消状态标志的订单。
订单表
ItemNum OrderNum
1 Item1 101
2 Item2 102
订单日志表
ItemNum OrderNum IsCanceled
1 Item2 102 1
最终结果
OrderNum ItemNum IsCanceled
1 101 Item1 0
2 102 Item2 1
这是演示;
https://rextester.com/RQQZJ4470
到目前为止,我还没有尝试过这种方法;
Dim result = From b In backOrders.AsEnumerable()
Join c In backOrdersCanceledItems.AsEnumerable() On
c.Field(Of Integer)("DistNum") Equals b.Field(Of Integer)("DistNum") And c.Field(Of String)("OriginalOrderNum") Equals b.Field(Of String)("OriginalOrderNum")
Select New With {.OriginalOrderNum = b.Field(Of String)("OriginalOrderNum"),
.DistNum = b.Field(Of Integer)("DistNum"), .ItemNum = b.Field(Of String)("ItemNum"),
.IsCanceled = c.Field(Of String)("IsCanceled")}
答案 0 :(得分:0)
当然,您只需要在LINQ中进行左联接:
Dim result = From b In backOrders.AsEnumerable()
Group Join c In backOrdersCanceledItems.AsEnumerable() On
c.Field(Of Integer)("DistNum") Equals b.Field(Of Integer)("DistNum") And c.Field(Of String)("OriginalOrderNum") Equals b.Field(Of String)("OriginalOrderNum") Into cj = Group
From c In cj.DefaultIfEmpty
Select New With {
.OriginalOrderNum = b.Field(Of String)("OriginalOrderNum"),
.DistNum = b.Field(Of Integer)("DistNum"),
.ItemNum = b.Field(Of String)("ItemNum"),
.IsCanceled = If(c?.Field(Of String)("IsCanceled"), "0") }
有关C#版本,请参见我的SQL to LINQ Recipe。