将IQueryable集合导出到Excel

时间:2009-05-05 10:00:22

标签: c# asp.net linq linq-to-sql excel

我有一个巨大的IQueryable,我想直接导出到Excel进行数据转储,我该怎么做?

我试图把它放到GridView中并从那里导出,如果我只使用一大块数据就可以工作,但是如果我使用整个IQueryable,则没有任何反应。

这是一个包含4k行的表,每行有70个左右的列。

编辑:如果更容易,CSV文件也会很好!

2 个答案:

答案 0 :(得分:2)

为什么不直接写文件?在foreach上使用IQueryable,然后逐行写出CSV文件。

答案 1 :(得分: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();
    }
}