Я хочу передать следующее утверждение в SubSonic 2.2
SELECT b.*
FROM tableA a
INNER JOIN tableB b
ON (a.year = b.year AND a.month = b.monath AND a.userid = b.userid);
Моя проблема в том, что команда SubSonic SqlQuery.LeftInnerJoin () не имеет перегрузки, которая занимает более одного столбца.
Поскольку любое соединение можно переписать только с помощью предложений where, я сделал в своем sql следующее:
SELECT b.*
FROM tableA a, tableB b
WHERE a.year = b.year
AND a.month = b.month
AND a.userid = b.userid
который должен дать тот же результат (на самом деле, по крайней мере, для mysql, между этими операторами нет абсолютно никакой логической разницы).
Но я также застрял, переводя это на дозвуковой, потому что член «IsEqualTo (...)» достаточно умен, чтобы понять, что мой параметр является строкой, и заключить его в кавычки.
DB.Select("TableB.*")
.From<TableA>()
.From<TableB>()
.Where(TableA.YearColumn).IsEqualTo("TableB.Year")
.And(TableA.MonthColumn).IsEqualTo("TableB.Month")
.And(TableA.UseridColumn).IsEqualTo("TableB.UserId")
(Я пробовал разные способы установки параметра IsEqualTo)
IsEqualTo(TableB.YearColumn)
IsEqualTo(TableB.YearColumn.QualifiedName)
Либо параметр интерпретируется как
TableA.Year = 'TableB.Year'
или я получаю исключение SqlQueryException.
Может кто-нибудь сказать мне, как сделать этот запрос с дозвуковой (либо первый - с JOIN, либо второй)? Спасибо