具有多个条件的组连接,其中一个具有常量

时间:2010-01-29 13:35:05

标签: vb.net linq linq-to-xml

这是我的(VB)LINQ的片段:

From event_evn In xmlEvents.Descendants("event_evn") _
Join genre_gnr In xmlGenre.Descendants("genre_gnr") On event_evn.Element("evn_gnr_id") Equals genre_gnr.Element("gnr_id").Value _
Group Join eventdata_eda In xmlEventData.Descendants("eventdata_eda") On _
eventdata_eda.Element("eda_evn_id").Value Equals event_evn.Element("evn_id").Value And _
eventdata_eda.Element("eda_dty_id").Value Equals "15" _
Into edaList = Group _
From eventdata_eda In edaList.DefaultIfEmpty() _
Where _

我在这条消息的最后一行收到错误: “你必须在'Equals'运算符的两边引用至少一个范围变量” 如何使用多个条件进行组连接,其中一个条件是与常量进行比较?

我找到了两个答案的地方:
http://forums.asp.net/p/1209451/2127071.aspx#2127071
LINQ to SQL - Left Outer Join with multiple join conditions

然而,它都在C#中,我在VB中需要它。

提前致谢:)

2 个答案:

答案 0 :(得分:4)

我最近遇到了一个类似的问题,我能够通过在LINQ查询中声明一个匿名类型的变量来保存我想要加入的所有值,并在连接中使用新的临时变量条件,所以你的代码片段如下所示:

From event_evn In xmlEvents.Descendants("event_evn") _
Let JoinVals = New With { .EvnId = event_evn.Element("evn_id").Value, _
                          .Fifteen = "15" } _
Join genre_gnr In xmlGenre.Descendants("genre_gnr") On event_evn.Element("evn_gnr_id")     Equals genre_gnr.Element("gnr_id").Value _
Group Join eventdata_eda In xmlEventData.Descendants("eventdata_eda") On _
eventdata_eda.Element("eda_evn_id").Value Equals JoinVals.EvnId And _
eventdata_eda.Element("eda_dty_id").Value Equals JoinVals.Fifteen _
Into edaList = Group _
From eventdata_eda In edaList.DefaultIfEmpty() _
Where _

答案 1 :(得分:0)

为了使连接保持恒定值,我添加了以下内容:

...
Group Join j In <YourJoinTable> On <YourEqualsClauses> Into Group
From g In Group.Where(Function(f) f.ColumnName = "<constantValue>").DefaultIfEmpty()

使用LinqPad我检查并生成了预期的SQL。

...
LEFT OUTER JOIN <YourJoinTable> ON <YourEqualsClauses>
AND [<YourJoinTable>].[ColumnName] = '<constantValue>'