2009-05-05 3 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が最適なソリューションではない可能性があります。私は非常に大きなデータセットを常に使用し、これに似た関数を使用します。私はそれがIEnumerableであるIQueryableであると仮定するつもりです。サンプルコードはここにあります。区切り文字が "、"の場合はCSVが出力され、区切り文字が "\ t"の場合はExcelで読み取り可能なファイルが出力されます。どちらの方法でも、このメソッドを実行してデータを出力する前に、列見出しを含む1行のヘッダーを出力するのと同様の操作を行う必要があります。

//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(); 
    } 
} 
関連する問題