以下两个查询在功能上是否相同? 第一个不返回任何数据,但第二个工作正常,输入相同。 我的第一个查询出了什么问题?
Dim LTest2 As IEnumerable = From e1 As QNCEntity In Shape.Entities _
Join e2 As QNCEntity In Shape.Entities _
On New With { _
.X = CDbl(e1.EntObj.X2), _
.Y = CDbl(e1.EntObj.Y2) _
} _
Equals New With { _
.X = CDbl(e2.EntObj.X1), _
.Y = CDbl(e2.EntObj.Y1) _
}
Dim LTest3 As IEnumerable = From e1 As QNCEntity In Shape.Entities _
Join e2 As QNCEntity In Shape.Entities _
On CDbl(e1.EntObj.X2) Equals CDbl(e2.EntObj.X1) _
And CDbl(e1.EntObj.Y2) Equals CDbl(e2.EntObj.Y1)
答案 0 :(得分:1)
无密钥属性 的匿名类型实例仅为Equal
。
请参阅:MSDN article on Anonymous Types, Header - Key Properties, Equality
要使第一个查询与第二个查询相同,您需要更改第一个代码示例以将X和Y属性标记为关键属性:
Dim LTest2 As IEnumerable = From e1 As QNCEntity In Shape.Entities _
Join e2 As QNCEntity In Shape.Entities _
On New With { _
Key .X = CDbl(e1.EntObj.X2), _
Key .Y = CDbl(e1.EntObj.Y2) _
} _
Equals New With { _
Key .X = CDbl(e2.EntObj.X1), _
Key .Y = CDbl(e2.EntObj.Y1) _
}
关键字段将按等值测试的值进行比较,而不是比较两个匿名类型的引用。
答案 1 :(得分:0)
Width
是一类吗?是?在这种情况下,第一个查询将通过引用比较对象,而第二个查询将比较实际值。 (...和参考文献 - 当然 - 永远不会匹配,因为你总是创建一个新实例。)