【发布时间】:2016-06-02 22:23:40
【问题描述】:
我正在构建一个 linq 查询:
From G In Games _
Where G.Field(Of Integer)("SystemID") = System _
Join F In Files On _
F.Field(Of String("Name") Equals G.Field(Of String)("PrimaryFilename") _
Select New With {
.gid = G.Field(Of Integer)("ID"),
.ggamename = G.Field(Of String)("GameName")}
我希望连接发生在它等于一个值或另一个值的地方。像这样的东西(这自然是行不通的):
From G In Games _
Where G.Field(Of Integer)("SystemID") = System _
Join F In Files On _
F.Field(Of String("Name") Equals G.Field(Of String)("PrimaryFilename") OR G.Field(Of String)("SafeFilename") _
Select New With {
.gid = G.Field(Of Integer)("ID"),
.ggamename = G.Field(Of String)("GameName")}
我该怎么办?
更新
以下有用的建议,但结果证明交叉连接太昂贵且速度太慢。我也试过下面的方法:
Dim query1 = _
From G In Games _
Where G.Field(Of Integer)("SystemID") = System _
Join F In Files On _
G.Field(Of String)("PrimaryFilename") Equals F.Field(Of String)("Name") _
Select New With {
.gid = G.Field(Of Integer)("ID"),
.ggamename = G.Field(Of String)("GameName"),
.gprimaryfilename = G.Field(Of String)("PrimaryFilename"),
.gsafegamename = G.Field(Of String)("SafeGameName")}
dim query2 = _
From G In Games _
Where G.Field(Of Integer)("SystemID") = System _
Join F In Files On _
G.Field(Of String)("SafeGameName") Equals F.Field(Of String)("Name") _
Select New With {
.gid = G.Field(Of Integer)("ID"),
.ggamename = G.Field(Of String)("GameName"),
.gprimaryfilename = G.Field(Of String)("PrimaryFilename"),
.gsafegamename = G.Field(Of String)("SafeGameName")}
Dim query = query1.Union(query2)
但这产生了一些奇怪的结果(错误的匹配)——感觉有点超出我的深度。关于如何实现简单的“或”匹配还有其他建议吗?
【问题讨论】: