使用 2 个数据表中的 linq 左连接多列并将其绑定到 1 个数据网格视图
Left join multiple column using linq from 2 datatable and bind it to 1 datagridview
你能帮助我理解 linq 吗,我在谷歌上搜索了将近一整天,但仍然无法正确理解架构思维。
问题来了,
我有来自不同数据库的 2 个数据表,我想在 datagridview
左连接 dataset
a 和 b 的 3 列中显示 (OrderNum,OrderLine,OrderRelNum
)
在 sql 中,查询如下所示
Select *
From dataset1 a
left join dataset2 b
on a.OrderNum = b.OrderNum
and a.OrderLine = b.OrderLine
and a.OrderRelNum = b.OrderRelNum
问题是我如何在 Linq 中执行此查询并在 datagridview 中显示它们?
这是我的解决代码,用于获取正确的查询并将它们数据源到数据网格视图中
Public Sub DataSetLinq120()
strSQL = "SELECT * FROM po "
strSQL2 = "SELECT * FROM PO"
Dim DA As New OdbcDataAdapter(strSQL, Connection)
Dim DS As New DataSet
DA.Fill(DS, "Source1")
Dim DA2 As New OdbcDataAdapter(strSQL2, Connection2)
Dim DS2 As New DataSet
DA2.Fill(DS2, "Source2")
Dim dt = DS.Tables("Source1")
Dim dt2 = DS2.Tables("Source2")
Dim custQuery = (From a In dt _
Group Join b In dt2 On a!OrderNum Equals b!OrderNum _
And a!OrderLine Equals b!OrderLine _
And a!OrderRelNum Equals b!OrderRelNum _
Into Data1 = Group _
From c In Data1.DefaultIfEmpty
Select New With {
.OrderNumber = a!OrderNum,
.OrderLine = a!OrderLine,
.OrderRelNumber = a!OrderRelNum,
.Stock_Status = If(c Is Nothing, "", c.Field(Of String)("Stock_Status")),
.Comments = If(c Is Nothing, "", c.Field(Of String)("Comments"))}).ToList
DataGridView1.DataSource = Nothing
DataGridView1.DataSource = custQuery
End Sub
这里有一篇来自 MSDN 的关于如何在 LINQ 中执行左外连接的好文章:https://msdn.microsoft.com/en-us/library/bb397895.aspx
您应该能够轻松地从中创建一个 LEFT JOIN。
除此之外,我不确定您为什么不想在此示例中简单地使用 SQL 处理左连接。如果您不需要原始数据集,我不明白您为什么不直接在 SQL.
中执行此操作
你能帮助我理解 linq 吗,我在谷歌上搜索了将近一整天,但仍然无法正确理解架构思维。
问题来了,
我有来自不同数据库的 2 个数据表,我想在 datagridview
左连接 dataset
a 和 b 的 3 列中显示 (OrderNum,OrderLine,OrderRelNum
)
在 sql 中,查询如下所示
Select *
From dataset1 a
left join dataset2 b
on a.OrderNum = b.OrderNum
and a.OrderLine = b.OrderLine
and a.OrderRelNum = b.OrderRelNum
问题是我如何在 Linq 中执行此查询并在 datagridview 中显示它们?
这是我的解决代码,用于获取正确的查询并将它们数据源到数据网格视图中
Public Sub DataSetLinq120()
strSQL = "SELECT * FROM po "
strSQL2 = "SELECT * FROM PO"
Dim DA As New OdbcDataAdapter(strSQL, Connection)
Dim DS As New DataSet
DA.Fill(DS, "Source1")
Dim DA2 As New OdbcDataAdapter(strSQL2, Connection2)
Dim DS2 As New DataSet
DA2.Fill(DS2, "Source2")
Dim dt = DS.Tables("Source1")
Dim dt2 = DS2.Tables("Source2")
Dim custQuery = (From a In dt _
Group Join b In dt2 On a!OrderNum Equals b!OrderNum _
And a!OrderLine Equals b!OrderLine _
And a!OrderRelNum Equals b!OrderRelNum _
Into Data1 = Group _
From c In Data1.DefaultIfEmpty
Select New With {
.OrderNumber = a!OrderNum,
.OrderLine = a!OrderLine,
.OrderRelNumber = a!OrderRelNum,
.Stock_Status = If(c Is Nothing, "", c.Field(Of String)("Stock_Status")),
.Comments = If(c Is Nothing, "", c.Field(Of String)("Comments"))}).ToList
DataGridView1.DataSource = Nothing
DataGridView1.DataSource = custQuery
End Sub
这里有一篇来自 MSDN 的关于如何在 LINQ 中执行左外连接的好文章:https://msdn.microsoft.com/en-us/library/bb397895.aspx
您应该能够轻松地从中创建一个 LEFT JOIN。
除此之外,我不确定您为什么不想在此示例中简单地使用 SQL 处理左连接。如果您不需要原始数据集,我不明白您为什么不直接在 SQL.