我有一個巨大的IQueryable,我想直接導出到Excel以進行數據轉儲,我該怎麼做?將IQueryable集合導出到Excel
我試圖把它放到一個GridView中,然後從那裏導出,如果我只使用一塊數據,那麼它將起作用,但如果我使用整個IQueryable,則不會發生任何事情。
這是一個4k行的表,每行有70列左右。
編輯:如果更容易,CSV文件也可以!
我有一個巨大的IQueryable,我想直接導出到Excel以進行數據轉儲,我該怎麼做?將IQueryable集合導出到Excel
我試圖把它放到一個GridView中,然後從那裏導出,如果我只使用一塊數據,那麼它將起作用,但如果我使用整個IQueryable,則不會發生任何事情。
這是一個4k行的表,每行有70列左右。
編輯:如果更容易,CSV文件也可以!
爲什麼不直接寫文件?在IQueryable
上使用foreach
,並逐行寫出一個CSV文件。
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();
}
}
我不想這樣做,因爲對象是如此之大,並可能會改變我不想手動輸入了每個屬性 - 有沒有通過通用對象的屬性的方式來循環? – naspinski 2009-05-07 05:14:32