如何在另一个查询中包含带有参数的Sql查询?
例如:
var sqlCount = new Sql("COUNT(*) as Result").From("ArticleGroups");
sqlCount.LeftJoin("Articles").On("Articles.ArticleGroupId = ArticleGroups.Id");
sqlCount.Where("Articles.SupplierId = @supplier", new { supplier = supplier });
sqlCount.GroupBy("ArticleGroups.Id, ArticleGroups.Description");
var sqlCountWrap = new Sql();
sqlCountWrap.Select("COUNT(*)").From(string.Format("({0}) pt", sqlCount.ToString()));
所以我的第二个Sql构建器需要将第一个查询包装到另一个查询中,但我对缺少的参数有异常。
我该如何解决这个问题?
更新
var sqlCountWrap = new Sql(sqlCount.ToString(), sqlCount.Arguments);
sqlCountWrap.Select("COUNT(*)").From(string.Format("({0}) pt", sqlCount.ToString()));
将sql和arguments传递给新的Sql实例无济于事:
例外:
base = {“指定的参数超出了有效范围 values。\ r \ nParameter name:指定参数'@ 0'但仅为0 提供的参数(在`FROM(SELECT COUNT(*)作为Result \ nFROM ArticleGroups \ nLEFT JOIN Articles \ nON Articles.ArticleGroupId = ArticleGroups.Id ...
答案 0 :(得分:0)
对于遇到与我相同问题的每个人,以下是解决方案:
var sqlCountWrap = new Sql();
sqlCountWrap.Select("COUNT(*)");
sqlCountWrap.Append("FROM (");
sqlCountWrap.Append(sqlCount.SQL, sqlCount.Arguments);
sqlCountWrap.Append(") pt");
使用append可以将sql包装在另一个sql中并传递参数。