データダンプのためにExcelに直接エクスポートしたい巨大なIQueryableがありますが、どうすればいいですか?ExcelにIQueryableコレクションをエクスポートする
私はそれをGridViewに入れてそこからエクスポートしようとしていましたが、これはデータのチャンクだけを使用すると機能しますが、IQueryable全体を使用すると何も起こりません。
これは4k行のテーブルで、各行には70個程度の列があります。
編集:CSVファイルも簡単です。
データダンプのためにExcelに直接エクスポートしたい巨大なIQueryableがありますが、どうすればいいですか?ExcelにIQueryableコレクションをエクスポートする
私はそれをGridViewに入れてそこからエクスポートしようとしていましたが、これはデータのチャンクだけを使用すると機能しますが、IQueryable全体を使用すると何も起こりません。
これは4k行のテーブルで、各行には70個程度の列があります。
編集:CSVファイルも簡単です。
なぜファイルを直接書きませんか? IQueryable
でforeach
を使用し、行ごとにCSVファイルを書き出します。
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();
}
}
オブジェクトが非常に大きく、変更する可能性があるため、私は手動で各プロパティを入力する必要はありません。汎用オブジェクトのプロパティをループする方法はありますか? – naspinski
obj.GetType()。GetProperties(BindingFlags.Public | BindingFlags.Instance)を呼び出し、各プロパティでGetValueを呼び出します。 –