Join Datatable Using Linq

the sample values do look constructed. Instead of Filter processing we can use the technique of merging rows with a group by

The image depicts two sequential steps in a workflow where the first assigns a clone of 'dt1' to 'dt3' and the second assigns a query result from 'dt1' to 'dt3'. (Captioned by AI)

dt3 =

(From d In dt1.AsEnumerable.Concat(dt2.AsEnumerable)
Group d By k1=d("Name").toString.Trim, k2=d("Product").toString.Trim Into grp=Group
Let rpr = grp.OrderBy(Function (g) If(isNothing(g("Price")), 0, g("Price").toString.Trim.Length)).Last()
Let pr = rpr("Price")
Let pos = {dt1.Rows.IndexOf(rpr),dt2.Rows.IndexOf(rpr)}.Max()
Order By pos
Let ra = New Object(){k1,k2,pr}
Select r = dt3.Rows.Add(ra)).CopyToDataTable

The image shows three data tables (dt1, dt2, dt3) with columns for Name, Product, and Price, each listing six entries of names paired with products and their respective prices. (Captioned by AI)