foreach를 사용하지 않고 여러 쿼리에서 데이터 가져 오기

.net dapper sql

문제

아래의 코드를 사용하여 테이블 목록의 테이블 개수를 쿼리합니다.

List<string> tablelist = //some value
foreach( string table in tablelist)
{
var rowcount = string.Format("select count(*) from " + view + " WITH (NOLOCK)");
int countresult = con.Query<int>(rowcount).FirstOrDefault();
if(countresult >0)
{ //someoperation }
}

여기서 DB 호출은 매번 수행됩니다. DB를 한 번만 호출하고 모든 select 문을 단일 변수에 출력 할 수있는 옵션이 있습니까? dapper.net을 (를) 처음 사용하는 데 도움을주십시오. 어떻게이 일을 성취 할 수 있습니까?

인기 답변

Dapper의 매개 변수 확장 코드는 List를 사용하여 IN 쿼리를 처리하지 않지만 DapperExtensions 의 술어 시스템은 IN 쿼리를 허용하고 매개 변수가 목록 유형 인 경우 IN 쿼리에 동일한 쿼리 조건자를 변환합니다.

매핑을 위해 Dapper를 계속 사용하려면 Jonathan Willcock의 sysobjects / sysindexes 쿼리를 뷰로 확장하고 결과를 나타내는 클래스를 만들 수 있습니다. 그런 다음 적절한 매개 변수를 사용하여 DapperExtensions GetList 쿼리를 조합 할 수 있습니다

보기 생성 :

CREATE VIEW TableRowCounts
AS
SELECT t.name TableName, i.rows Records 
FROM sysobjects t INNER JOIN sysindexes i ON i.ID = t.ID where t.xtype = 'U' and i.indid in (0,1)

결과 클래스 :

public class TableRowCounts
{
    public string TableName { get; set; }
    public int Records { get; set; }
}

결과를 수화하는 DapperExtensions 쿼리 :

PredicateGroup query = new PredicateGroup();
List<string> tables;

tables = new List<string> { "table1", "table2" };
query.Predicates = new List<IPredicate>();
query.Predicates.Add(Predicates.Field<TableRowCounts>(f => f.TableName, Operator.Eq, tables));

List<TableRowCounts> results;
results = _connection.GetList<TableRowCounts>(query).ToList();

IN 성능에 관한 부수적 인 내용으로, 매개 변수 목록 (이 경우 테이블 이름)이 약 200 개 항목보다 큰 경우 성능이 저하 될 수 있습니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.