2011-11-11 3 views
2

여러 열이 포함 된 데이터 집합이 있는데 목록에서 제외하고 모든 열을 제거하면됩니다.LINQ를 사용하여 C# Dataset 열 제거

예를 들어, 데이터 세트에는 "ColA", "ColB"및 "ColC"열이 있습니다. 내 목록에는 "ColB"라는 문자열이 1 개 있습니다. 내가하고 싶은 것은 "ColA"와 "ColC"를 제거하거나 "ColB"만을 유지하는 것입니다.

LINQ를 사용하여이 문제를 해결할 수 있습니까? 동적으로 생성 된 문자열 목록이 원래 데이터 집합의 열을 어떻게 제거 할 수 있는지 잘 모르겠습니다. 수행

답변

1
var columnsFromTable = dt.Columns;// get all your column here 
var columnsFromCollection = new string[] { "ColB" };//column to remove 

Array.ForEach(columnsFromCollection,col=> 
dt.Columns.Remove(col)); 
+0

ColB를 유지하고 다른 모든 열을 제거하려고합니다. ColB를 제거하려고하지 않습니다. – JesseBuesking

0

은 "고전적인"투사가 컴파일러 지원이 필요

var res = myList.Select(d => new {d.ColB}); 

실행 속도가 지나치게 중요하지 않은 경우,

그러나 (위의 코드 ColB라는 하나의 속성과 익명 클래스를 만듭니다) 컴파일러 생성 클래스 대신 ExpandoObject을 사용할 수 있습니다.

var columnList = new[] {"ColB"}; 
var res = myList.Select(d => Project(d, columnList)); 
... 
static ExpandoObject Project(MyDataObject d, string[] columns) { 
    var res = new ExpandoObject(); 
    // Using reflection here is a much better solution 
    if (Array.IndexOf(columns, "ColA") >= 0) res.ColA = d.ColA; 
    if (Array.IndexOf(columns, "ColB") >= 0) res.ColB = d.ColB; 
    if (Array.IndexOf(columns, "ColC") >= 0) res.ColC = d.ColC; 
    return res; 
} 
관련 문제