Dapper는 Massive에서와 같이 번호 매겨진 매개 변수를 사용합니까?

dapper massive sql-server

문제

Dapper는 Named (@a, @b, ...)와 달리 Massive (@ 0, @ 1, ...)와 같은 번호 매겨진 매개 변수를 사용합니까?

다음과 같이 쿼리를 생성해야합니다.

//select @0 as val union select @1 union select @2 union select @3 union select @4 
//union select @5 union select @6 union select @7 union select @8 union select @9
var sb = new StringBuilder("select @0 as val");
for (int i = 1; i < 10; i++)
{
    sb.AppendFormat(" union select @{0}", i);
}
var query = sb.ToString();
//---Dapper = fail
var db = Connection;
var list = db.Query(query, param: new object[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 });
//---Massive = ok
var db2 = new Massive.DynamicModel(coins);
var list2 = db2.Query(query, args: new object[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 });

Dapper의 문제에 대한 해결책은 무엇입니까?

수락 된 답변

Massive는 쿼리에서 위치 인수를 사용하지만 dapper는 명명 된 인수를 사용합니다. 대용량에서는 다음과 같은 매개 변수 배열을 전달할 수 있습니다. new int[] {1,2,3} 반면에 dapper에서는 new { a = 1, b = 2 } 와 같은 매개 변수 객체를 전달해야합니다.

dapper를 사용하여 유사한 솔루션을 얻으려면 매개 변수 이름을 매개 변수로 전달할 수있는 DynamicParameters 객체를 만들 수 있습니다. 여기에서 키는 매개 변수의 이름이고 값은 {"0",0}, {"1", 1},

LINQ를 사용하여 배열을 사전으로 쉽게 바꿀 수 있습니다.

var dictionary = new object[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
    .Select((item, ind) => new {ind = ind.ToString(), item})
    .ToDictionary(item => item.ind, item => item.item);

DynamicParameters p = new DynamicParameters(dictionary);

var list = db.Query(query, param: p);


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