使用Peta Poco

时间:2017-11-16 14:03:17

标签: sql-server orm petapoco

如何在另一个查询中包含带有参数的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 ...

1 个答案:

答案 0 :(得分:0)

对于遇到与我相同问题的每个人,以下是解决方案:

var sqlCountWrap = new Sql();
sqlCountWrap.Select("COUNT(*)");
sqlCountWrap.Append("FROM (");
sqlCountWrap.Append(sqlCount.SQL, sqlCount.Arguments);
sqlCountWrap.Append(") pt");

使用append可以将sql包装在另一个sql中并传递参数。