2017-11-16 18 views
0

SQL 쿼리를 다른 쿼리에 인수로 묶을 수있는 방법은 무엇입니까? 예를 들어Peta Poco를 사용하여 다른 Sql 쿼리에 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 빌더가 다른 하나에 첫 번째 쿼리를 포장해야하지만 내가 누락 된 인수에 대한 예외를 얻을.

어떻게 해결할 수 있습니까?

UPDATE

var sqlCountWrap = new Sql(sqlCount.ToString(), sqlCount.Arguments); 
sqlCountWrap.Select("COUNT(*)").From(string.Format("({0}) pt", sqlCount.ToString())); 

도움이되지 않는 새로운 SQL 인스턴스에 SQL 및 인수를 전달 :

예외 :

기본 = { "의 지정한 인수를 벗어났습니다 유효한 값의 범위. \ r \ n 매개 변수 이름 : '@ 0'매개 변수가 지정되었지만 0 매개 변수 만 제공됨 ('F ROM은 (결과 COUNT (*)를 선택 \ nFROM ArticleGroups \ nLEFT 기사 가입하세요 \ 비 Articles.ArticleGroupId = ArticleGroups.Id ... 저와 같은 문제에 모두 들어

답변

0

는, 여기에 솔루션입니다 :

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

append를 사용하면 sql을 다른 sql로 감싸고 인수를 전달할 수 있습니다.