2009-05-05 4 views
2

데이터 덤프를 위해 Excel로 직접 내보내려는 거대한 IQueryable이 있습니다. 어떻게해야합니까?Excel로 IQueryable 컬렉션 내보내기

GridView에 데이터를 넣으려고했는데 데이터 청크 만 사용하면 작동하지만 전체 IQueryable을 사용하면 아무 일도 일어나지 않습니다.

이 테이블은 4k 개의 행이 있고 각 행에는 70 개 정도의 열이 있습니다.

편집 : CSV 파일도 간단합니다.

답변

2

파일을 직접 쓰지 않는 이유는 무엇입니까? IQueryableforeach을 사용하고 행별로 CSV 파일을 작성하십시오.

+0

개체가 너무 커서 수동으로 각 속성을 입력하고 싶지 않을 수 있기 때문에이 작업을 수행하지 않으려 고합니다. 일반 개체의 속성을 반복하는 방법이 있습니까? – naspinski

+0

obj.GetType(). GetProperties (BindingFlags.Public | BindingFlags.Instance)를 호출 한 다음 각 속성에서 GetValue를 호출하십시오. –

1

CSV가 최상의 솔루션이 아닐 수 있습니다. 나는 매우 큰 데이터 세트를 항상 사용하고 이와 비슷한 기능을 사용한다. IQueryable이라면 IEnumerable이라고 가정 할 것입니다. 샘플 코드는 다음과 같습니다. 구분 기호가 ","이면 CSV를 출력하고 구분 기호가 "\ t"이면 Excel에서 읽을 수있는 파일을 출력합니다. 어느 쪽이든 데이터를 출력하기 위해이 메서드를 실행하기 전에 열 제목이 포함 된 한 줄의 머리글을 출력하는 것과 비슷한 작업을 수행해야합니다.

//This is changed slightly from my actual code but it should give you an idea of what to do 
//tickStorage contains a dictionary named MessageData and the key is the column name 
//Obviously tickStorage is what is being directly mapped to my listView component 

private void OutputItems(StreamWriter writer, int startIndex, int endIndex, String delimiter) 
{ 
    endIndex = endIndex < tickStorage.Count ? endIndex : tickStorage.Count; 
    for (Int32 i = startIndex; i < endIndex; i++) 
    { 
    IEnumerator<Columns> fields = listView.ColumnsInDisplayOrder.GetEnumerator(); 
    fields.MoveNext(); 
    writer.Write((tickStorage[i].MessageData[fields.Current.Text]).Trim()); 
    while (fields.MoveNext()) 
    { 
     writer.Write(delimiter + (tickStorage[i].MessageData[fields.Current.Text]).Trim()); 
    } 
    writer.WriteLine(); 
    } 
}