C# 保存IList<;T>;或IQueryable<;T>;出类拔萃#

C# 保存IList<;T>;或IQueryable<;T>;出类拔萃#,c#,excel,.net-3.5,C#,Excel,.net 3.5,我正在通过LINQtoSQL生成一个报告,并将其显示在网站上 我需要将报告保存在MS Excel(或.csv)中并通过电子邮件发送给用户 如何将其保存为Excel或.csv .NET 3.5/C# 编辑: 作品完美无瑕。如果在页面上使用AJAX,请确保在更新面板中添加PostBaseTrigger以导致完全回发,否则无法正常工作 <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <

我正在通过LINQtoSQL生成一个报告,并将其显示在网站上

我需要将报告保存在MS Excel(或.csv)中并通过电子邮件发送给用户

如何将其保存为Excel或.csv

.NET 3.5/C#

编辑: 作品完美无瑕。如果在页面上使用AJAX,请确保在更新面板中添加PostBaseTrigger以导致完全回发,否则无法正常工作

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <asp:Button ID="Button1" runat="server" Text="Export Grid" 
            onclick="Button1_Click" />
    </ContentTemplate>
    <Triggers>
        <asp:PostBackTrigger ControlID="Button1" />
    </Triggers>
</asp:UpdatePanel>
,但它没有公认的解决方案那么简单。

这是我找到的最简单的解决方案。

转到。然后在VS中打开源代码并注释掉FieldMapper.cs中的第201行,以修复破坏列顺序的错误:

//Array.Sort(m_IndexToInfo);
重新编译,就可以开始了

(我从文章的评论中发现)

然后使用:

CsvFileDescription outputFileDescription = new CsvFileDescription
{
    SeparatorChar = '\t', // tab delimited
    FirstLineHasColumnNames = false // no column names in first record
};

CsvContext cc = new CsvContext();

cc.Write(
    YOUR_IQUERYABLE_RESULT_HERE,
    "filename.csv",
    outputFileDescription);

我制作了一个简化的IQueryable
.WriteToFile(path)扩展方法,但我在这台机器上没有它。

更多详细信息会有所帮助。你有什么特别的问题吗?您得到了什么错误?这种方法对于较小的结果集非常有效,但对于较大的结果集,LINQtoCSV绝对是一个更好的解决方案。