修复Subsonic多表条件查询bug


SqlQueryquery = new Select().From(Tables.UserBilling);
query .InnerJoin(UserInfo.UserIdColumn, UserBilling.UserIdColumn);

query.Where("UserInfo.UserId").IsEqualTo(1);

UserBilling、UserInfo表中多含有UserId字段,所以在加条件查询的时候需要指定表名,可是一旦指定了表名就会抛异常

Incorrect syntax near '.'.
Must declare the scalar variable "@UserId".

查看了Subsonic的源码,发现问题出在PrefixParameter(Utility.cs)方法,因为它把参数设置为@UserInfo.UserId,而这个在执行的时候,肯定是不正确的,我的做法是查找是否含有字符(.)如果有的话就取.号后面的字符串。

   /// <summary>
/// Prefixes the passed parameter value with the provider specific parameter prefix.
/// </summary>
/// <param name="parameter">The parameter to evaluate</param>
/// <param name="provider">The provider where the parameter will be used</param>
/// <returns></returns>
public static string PrefixParameter(string parameter, DataProvider provider)
{
//added this check for Unit Testing weirdness - RC
if(provider == null)
provider = DataService.Provider;

string prefix = provider.GetParameterPrefix();

if (!parameter.StartsWith(prefix))
{
//2009-12-25 修正多表关联且含同一字段的条件查询(产生的参数名称,只取.后面的字符)
parameter = parameter.IndexOf(".") == -1 ? parameter : parameter.Substring(parameter.IndexOf(".") + 1);
parameter = String.Concat(prefix, parameter.Replace(" ", String.Empty));
}
return parameter;
}

优质内容筛选与推荐>>
1、小记重新开始写Blog
2、PHP功能类[获取客户端IP、页面跳转]
3、【干货】利用MVC5+EF6搭建博客系统(四)(下)前后台布局实现、发布博客以及展示
4、报表开发过程
5、IIS 发布后无法连接数据库(应用池问题)


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号