KeiStory

반응형

Dapper 쿼리 결과 List<dynamic> 에 순번 필드 추가하기

 

Dapper를 사용할 때, 쿼리 결과를 List<dynamic> 형태로 받아서 처리하는 경우가 많습니다.

그런데 UI 표시나 데이터 출력 시 각 행에 순번(예: Index, No, RowNum)을 추가하고 싶은 경우가 있습니다

이번 포스팅에서는 List<dynamic>에 순번 필드를 앞에 추가하는 방법을 소개합니다.

using System.Dynamic;

//  Dapper 결과
List<dynamic> result = connection.Query("SELECT Name, Age FROM Users").ToList();

// 순번 Index 필드 추가 및 순번 설정
var indexedResult = result
    .Select((item, index) =>
    {
        var newObj = new ExpandoObject() as IDictionary<string, object>;

        // 1. 먼저 Index 추가
        newObj["Index"] = index + 1;

        // 2. 기존 필드 순서대로 복사
        foreach (var kv in (IDictionary<string, object>)item)
        {
            newObj[kv.Key] = kv.Value;
        }

        return (dynamic)newObj;
    })
    .ToList();

위 처럼 코딩하게 되면 첫번째 필드에 Index 순번 필드가 추가됩니다.

 

ExpandoObject는 속성을 런타임에 동적으로 구성할 수 있고 IDictionary<string, object>로 캐스팅하면 Key-Value 형태로 조작 가능합니다. 이를 C#의 Select((item, index) => ...)를 활용하면 인덱스를 쉽게 부여할 수 있습니다.

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band