具有多个条件的组加入,其中一个具有常数

Posted

技术标签:

【中文标题】具有多个条件的组加入,其中一个具有常数【英文标题】:Group join with multiple conditions and one of them being with a constant 【发布时间】:2011-01-10 20:35:15 【问题描述】:

这是我的 (VB) LINQ 的 sn-p:

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#2127071LINQ to SQL - Left Outer Join with multiple join conditions

但是它在 C# 中和我在 VB 中都需要它。

提前致谢:)

【问题讨论】:

您介意发布您的 xml 示例,以便可以测试和验证答案中给出的代码吗? 【参考方案1】:

我最近遇到了一个类似的问题,我能够通过在 LINQ 查询中声明一个匿名类型的变量来保存我想要加入的所有值,并在加入时使用这个新的临时变量来解决它条件,因此您的 sn-p 如下所示:

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 _

【讨论】:

【参考方案2】:

要在常量值上左连接,我添加了以下内容:

...
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>'

【讨论】:

以上是关于具有多个条件的组加入,其中一个具有常数的主要内容,如果未能解决你的问题,请参考以下文章

更新数组中的单个项目,其中多个条件适用于任何数组项目

加入具有不同结构的多个表?

join 子句中的表达式之一的类型不正确。对“加入”的调用中的类型推断失败。-具有多个条件的 Linq JOIN

javascript 过滤具有多个条件的对象数组。

Matlab求解具有多个初始条件的 ODE 系统

消除类似行但具有特定值