"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > LINQ 쿼리에서 열을 동적으로 선택하려면 어떻게해야합니까?

LINQ 쿼리에서 열을 동적으로 선택하려면 어떻게해야합니까?

2025-02-26에 게시되었습니다
검색:779

How Can I Dynamically Select Columns in LINQ Queries?

linq에서 동적 열 선택

컴파일 시간에 열을 알 수 없을 때 LINQ 쿼리에서 특정 열을 동적으로 선택하는 것은 어려울 수 있습니다. 그러나 선택하기 위해 동적으로 Lambda 표현식을 생성하는 솔루션이 있습니다.

다음 데이터 클래스를 고려하십시오 :

public class Data
{
    public string Field1 { get; set; }
    public string Field2 { get; set; }
    public string Field3 { get; set; }
    public string Field4 { get; set; }
    public string Field5 { get; set; }
}

특정 열을 동적으로 선택하려면 CreateNewStatement 메소드를 사용하여 Lambda 표현식을 동적으로 만들 수 있습니다.

private Func CreateNewStatement(string fields)
{
    var xParameter = Expression.Parameter(typeof(Data), "o");
    var xNew = Expression.New(typeof(Data));

    var bindings = fields.Split(',')
        .Select(o => o.Trim())
        .Select(o =>
        {
            var mi = typeof(Data).GetProperty(o);
            var xOriginal = Expression.Property(xParameter, mi);
            return Expression.Bind(mi, xOriginal);
        });

    var xInit = Expression.MemberInit(xNew, bindings);
    var lambda = Expression.Lambda>(xInit, xParameter);
    return lambda.Compile();
}

이 메소드는 쉼표로 분리 된 필드 목록을 문자열로 사용하고 지정된 필드와 새 데이터 객체를 초기화하는 람다 표현식을 동적으로 생성합니다.

그런 다음 CreateNewStatement 메소드를 사용하여 Lambda 표현식을 만들어 선택하도록 전달할 수 있습니다 :

var result = list.Select(CreateNewStatement("Field1, Field2"));

이것은 지정된 필드가 채워진 일련의 데이터 객체를 반환합니다. 이 기술은 선택된 필드가 컴파일 시간에 알려지지 않은 상황에 적합합니다. 선택된 필드가 정적 인 경우 일반 람다 표현식 또는 반사 기반 방법을 사용하는 것이 더 효율적입니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3