C# 将IQueryable集合导出到Excel

C# 将IQueryable集合导出到Excel,c#,asp.net,linq,linq-to-sql,excel,C#,Asp.net,Linq,Linq To Sql,Excel,我有一个巨大的IQueryable,我想直接导出到Excel进行数据转储,我该怎么做 我试图将其放入GridView并从中导出,如果我只使用一大块数据,这是可行的,但如果我使用整个IQueryable,则什么也不会发生 这是一个有4k行的表,每行大约有70列 编辑:CSV文件也会很好,如果这更容易 为什么不直接写入文件?在IQueryable上使用foreach,逐行写出CSV文件。CSV可能不是最佳解决方案。我一直在处理非常大的数据集,并使用类似的函数。我假设如果它是可数的,那么它也是可数的。

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

我试图将其放入GridView并从中导出,如果我只使用一大块数据,这是可行的,但如果我使用整个IQueryable,则什么也不会发生

这是一个有4k行的表,每行大约有70列


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

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

CSV可能不是最佳解决方案。我一直在处理非常大的数据集,并使用类似的函数。我假设如果它是可数的,那么它也是可数的。这是示例代码,您可以随意使用它。如果分隔符为“”,则将输出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();
    }
}
//这与我的实际代码略有不同,但它应该让您知道该怎么做
//tickStorage包含一个名为MessageData的字典,键是列名
//显然,存储是直接映射到我的listView组件的内容
私有void输出项(StreamWriter writer、int startIndex、int endIndex、字符串分隔符)
{
endIndex=endIndex
我不想这样做,因为对象太大,可能会发生变化。我不想手动键入每个属性-有没有方法循环遍历泛型对象的属性?调用obj.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance),然后对每个属性调用GetValue。