如何使用VB.Net中的.Net LINQ方法语法连接多个列?

时间:2017-09-27 13:48:05

标签: .net vb.net linq join

我有一种情况需要使用表达式树来动态构建在运行时连接两个DataTable对象的LINQ查询。似乎表达式树只能使用方法语法构造(如果我错了,请告诉我)。 我目前的查询与此类似:

Dim result = From a In dataTable1
             Join b In dataTable2
                 On a.Item("Property1") Equals b.Item("Property1") And
                    a.Item("Property2") Equals b.Item("Property2") And
                    a.Item("Property3") Equals b.Item("Property3") And
             Select New With {
                .prop1 = a.Item("Property1")
                .prop2 = a.Item("Property2")
                .prop3 = b.Item("Property3")
                .prop4 = b.Item("Property4")
                .prop5 = b.Item("Property5")}

我的问题是:如何使用Join子句的方法语法指定复合键连接的多个列?

2 个答案:

答案 0 :(得分:0)

如果您在被比较的对象中创建一个属性,即连接的"键",您可以比较连接中的键到键。

如果对象类型相同,您还可以创建自定义IEQualityComparer(of ...)

答案 1 :(得分:0)

使用匿名对象进行相等比较

Dim result = From a In dataTable1
             Join b In dataTable2
             On New With {
                 .p1 = a.Item("Property1"),
                 .p2 = a.Item("Property2"),
                 .p3 = a.Item("Property3")} _
             Equals New With {
                 .p1 = b.Item("Property1"),
                 .p2 = b.Item("Property2"),
                 .p3 = b.Item("Property3")}
             Select New With {
                 .prop1 = a.Item("Property1"),
                 .prop2 = a.Item("Property2"),
                 .prop3 = b.Item("Property3"),
                 .prop4 = b.Item("Property4"),
                 .prop5 = b.Item("Property5")}