Я использую версию 2.1 SubSonic. Я пытаюсь создать относительно простой запрос, в котором я получаю список ролей для пользователя, используя UserId в качестве параметра. (UserId - это строка ...)
SubSonic.SqlQuery sel = new SubSonic.Select().From(Data.Tables.Role).InnerJoin(Data.Tables.UserRole, Data.UserRole.Columns.RoleId, Data.Tables.Role, Data.Role.Columns.Id).InnerJoin(Data.Tables.User, Data.User.Columns.Id, Data.Tables.UserRole, Data.UserRole.Columns.UserId).Where("[dbo].[User].[Id]").IsEqualTo(userId);
это генерирует запрос
SELECT [dbo]. [Role]. [Id], [dbo]. [Role]. [PID], [dbo]. [Role]. [Name]
ОТ [dbo]. [Роль]
INNER JOIN [dbo]. [UserRole] ON [dbo]. [Role]. [Id] = [dbo]. [UserRole]. [RoleId]
INNER JOIN [dbo]. [Пользователь] ON [dbo]. [UserRole]. [UserId] = [dbo]. [Пользователь]. [Id]
ГДЕ [dbo]. [Пользователь]. [Id] = @ [dbo]. [Пользователь]. [Id] 0
, что не удается. Если я заменю Where на .Where (Data.User.Columns.Id), это сгенерирует запрос
SELECT [dbo]. [Role]. [Id], [dbo]. [Role]. [PID], [dbo]. [Role]. [Name]
ОТ [dbo]. [Роль]
INNER JOIN [dbo]. [UserRole] ON [dbo]. [Role]. [Id] = [dbo]. [UserRole]. [RoleId]
INNER JOIN [dbo]. [Пользователь] ON [dbo]. [UserRole]. [UserId] = [dbo]. [Пользователь]. [Id]
ГДЕ [dbo]. [Роль]. [Id] = @ Id0
, которая использует таблицу Role в предложении Where вместо таблицы User.
Это ошибка или я что-то делаю неправильно? Каков будет правильный способ сделать это? Спасибо.