C #의 DataTable에서 열 제거


113

함수 호출에서 다시 전달되는 DataTable을 얻는 DataSet이 있습니다. 15-20 개의 열이 있지만 10 개의 데이터 열만 필요합니다.

원하지 않는 열을 제거하고 원하는 열만 정의 된 다른 열로 DataTable을 복사하거나 컬렉션을 반복하고 필요한 열을 사용하는 것이 더 낫습니다.

고정 길이 데이터 파일에 값을 써야합니다.


내가받은 데이터 세트를 제어 할 수 없습니다. 내가 아는 유일한 것은 그것이 모든 것을 포함하고 있다는 것입니다.
Brian G

답변:


302

대역폭과 메모리를 줄이기 위해 선택한 열을 제한하는 것 외에도 :

DataTable t;
t.Columns.Remove("columnName");
t.Columns.RemoveAt(columnIndex);

13
명확히하기 위해 : 이것은 DataTable빈 .NET뿐만 아니라 이미 기존 행 이있는 경우에도 작동합니다 DataTable.
Uwe Keim

23

원하는 열 이후의 모든 열을 제거하려면 아래 코드가 작동해야합니다. 열 수가 10 개 이하가 될 때까지 인덱스 10에서 제거됩니다 (열이 0 기반임을 기억).

DataTable dt;
int desiredSize = 10;

while (dt.Columns.Count > desiredSize)
{
   dt.Columns.RemoveAt(desiredSize);
}

1
내 2C, 나는 악몽 유지 보수에 열 인덱스 리드와 협력,이 솔루션을 좋아하지 않아 ..
로베르토

1
질문에는 "..columns defined that I want .."라는 문이 포함되어 있으므로 필요한 열이 반드시 순차적 인 순서는 아니므로 "처음 10 개 열이 필요합니다"라고 말할 수 없습니다. 이러한 솔루션은 그가 원하는 열 이름의 배열을 포함해야하므로이 "정의 된"이름 집합에 속하지 않는 다른 모든 항목을 제거 할 수 있습니다. 이를 구현하는 다양한 방법; 간단한 foreach 루프에서 IN을 사용하는 쿼리 또는 linq까지.
Roberto

3

질문은 이미 답변 된 것으로 표시되었지만 그 사람이 DataTable.

그래서 여기에 동일한 문제가 발생했을 때 제가 한 일이 있습니다.

string[] ColumnsToBeDeleted = { "col1", "col2", "col3", "col4" };

foreach (string ColName in ColumnsToBeDeleted)
{
    if (dt.Columns.Contains(ColName))
        dt.Columns.Remove(ColName);
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.