您的位置:首页 > 其它

修复Subsonic多表条件查询bug

2009-12-25 12:45 288 查看
SqlQuery query = 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐