Групповое объединение с несколькими условиями и одно из них с постоянным - PullRequest
3 голосов
/ 29 января 2010

Вот фрагмент моего (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 _

Я получаю сообщение об ошибке в последней строке с этим сообщением: «Вы должны ссылаться как минимум на одну переменную диапазона по обе стороны от оператора« Равно »» Как мне присоединиться к группе с несколькими условиями, где одним из этих условий является сравнение с константой?

Я нашел два места с ответом:
http://forums.asp.net/p/1209451/2127071.aspx#2127071
LINQ to SQL - левое внешнее соединение с несколькими условиями соединения

Однако это и в C #, и мне это нужно в VB.

Заранее спасибо:)

Ответы [ 2 ]

4 голосов
/ 29 января 2010

У меня недавно была похожая проблема, и я смог ее обойти, объявив переменную анонимного типа в запросе 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 _
0 голосов
/ 17 августа 2015

К левому соединению с постоянным значением я добавил следующее:

...
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>'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...