我有一种情况需要使用表达式树来动态构建在运行时连接两个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子句的方法语法指定复合键连接的多个列?
答案 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")}