我使用的是SubSonic 2.1版。我正在尝试构建一个相对简单的查询,其中我使用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]。[User] ON [dbo]。[UserRole]。[UserId] = [dbo]。[User]。[Id] WHERE [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]。[User] ON [dbo]。[UserRole]。[UserId] = [dbo]。[User]。[Id] WHERE [dbo]。[角色]。[Id] = @ Id0
使用Where子句中的Role表而不是User表。
这是一个错误,还是我做错了什么?这样做的正确方法是什么?感谢。
答案 0 :(得分:1)
这已在2.2版中修复 - 我建议升级。