使用Where()时生成的SubSonic.SqlQuery不正确

使用Where()时生成的SubSonic.SqlQuery不正确,subsonic,Subsonic,我使用的是亚音速2.1版。我正在尝试构建一个相对简单的查询,在这里我使用UserId作为参数为用户获取角色列表。(UserId是一个字符串…) 这将生成查询 选择[dbo].[Role].[Id],[dbo].[Role].[PID],[dbo].[Role].[Name] 来自[dbo]。[Role] [dbo].[Role].[Id]=[dbo].[UserRole].[RoleId]上的内部联接[dbo].[UserRole] [dbo].[UserRole].[UserId]=[dbo]

我使用的是亚音速2.1版。我正在尝试构建一个相对简单的查询,在这里我使用UserId作为参数为用户获取角色列表。(UserId是一个字符串…)

这将生成查询

选择[dbo].[Role].[Id],[dbo].[Role].[PID],[dbo].[Role].[Name] 来自[dbo]。[Role] [dbo].[Role].[Id]=[dbo].[UserRole].[RoleId]上的内部联接[dbo].[UserRole] [dbo].[UserRole].[UserId]=[dbo].[User].[Id]上的内部联接[dbo].[User] 其中[dbo].[User].[Id]=@[dbo].[User].[Id]0

它失败了。如果我将Where替换为.Where(Data.User.Columns.Id),这将生成查询

选择[dbo].[Role].[Id],[dbo].[Role].[PID],[dbo].[Role].[Name] 来自[dbo]。[Role] [dbo].[Role].[Id]=[dbo].[UserRole].[RoleId]上的内部联接[dbo].[UserRole] [dbo].[UserRole].[UserId]=[dbo].[User].[Id]上的内部联接[dbo].[User] 其中[dbo].[Role].[Id]=@Id0

它使用Where子句中的角色表而不是用户表


这是一个bug,还是我做错了什么?正确的方法是什么?谢谢。

这在2.2版中已修复-我建议升级。

谢谢Rob。这就解决了问题。它不再试图将我的字符串ID转换为int(几天前我刚开始使用亚音速,所以我仍然感觉像noob。)ps:几天前我刚在Amazon上订购了你的MVC书籍。我迫不及待地想得到它/奉承
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);