/ / 2つのデータテーブルからlinqを使用して複数の列を左に結合し、それを1つのdatagridviewにバインドする - vb.net、linq、datagridview

2つのdatatableのlinqを使用して複数の列を結合し、1つのdatagridviewにバインドする - vb.net、linq、datagridview

linqを理解するのを手伝ってもらえますか?私はほぼ一日中それをグーグルしていますが、それでもアーキテクチャの考え方を適切に得ることはできません。

これが問題だ、 私は「異なるデータベースから2つのデータテーブルを持っています。表示したいです。 datagridview 左結合 dataset 3列のaとb(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に表示する方法です。

これは、正しいクエリを取得し、それらを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

回答:

回答№1は0

以下は、LINQで左外部結合を実行する方法に関するMSDNの優れた記事です。 https://msdn.microsoft.com/en-us/library/bb397895.aspx
これで簡単にLEFT JOINを作成できるはずです。

それとは別に、この例ではSQLとの左結合を単純に処理したくないのはよくわかりません。元のデータセットを必要としないのであれば、なぜSQLでこれを直接実行しないのかわかりません。