2009-05-05 76 views
2

我有一個巨大的IQueryable,我想直接導出到Excel以進行數據轉儲,我該怎麼做?將IQueryable集合導出到Excel

我試圖把它放到一個GridView中,然後從那裏導出,如果我只使用一塊數據,那麼它將起作用,但如果我使用整個IQueryable,則不會發生任何事情。

這是一個4k行的表,每行有70列左右。

編輯:如果更容易,CSV文件也可以!

回答

2

爲什麼不直接寫文件?在IQueryable上使用foreach,並逐行寫出一個CSV文件。

+0

我不想這樣做,因爲對象是如此之大,並可能會改變我不想手動輸入了每個屬性 - 有沒有通過通用對象的屬性的方式來循環? – naspinski 2009-05-07 05:14:32

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(); 
    } 
}