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