【问题标题】:C# - Excel Export a ListC# - Excel 导出列表
【发布时间】:2018-10-05 07:23:50
【问题描述】:

您好,我有此代码可将列表导出到 Excel:

private DataTable ListaDatiReportQuietanzamento(List<DatiReportQuietanzamento> datiReportQuietanzamento)
{
    DataTable dt = new DataTable("DatiReportQuietanzamento");
    dt.Columns.Add("Polizza");
    dt.Columns.Add("Posizione");
    dt.Columns.Add("Codice Frazionamento");

    var result = datiReportQuietanzamento.ToDataTable().AsEnumerable().Select(p =>
        new
        {
            n_polizza = p.Field<long>("n_polizza"),
            n_posizione = p.Field<byte>("n_posizione"),
            c_frazionamento = p.Field<string>("c_frazionamento")
        }).Distinct().ToList();

    foreach (var item in result)
    {
        dt.Rows.Add(item.n_polizza, item.n_posizione, item.c_frazionamento);
    }
    return dt;
}

此方法适用于不包含很多项目的列表,但当列表非常大时,该方法会花费太多时间。

有一种方法可以避免 foreach 并直接将项目添加到行中?也许是 Lambda 表达式?

谢谢。

【问题讨论】:

  • 对于初学者,您可以避免使用datiReportQuietanzamento.ToDataTable().AsEnumerable(),直接使用datiReportQuietanzamento.Select()。还要避免.ToList()
  • 另外here 是您如何使用选定的列用其他数据表填充一个数据表
  • 我删除了 tsql 标签,因为您使用的是 EntityFramework。如果您确实想使用 SQL 查询,链接帖子中有答案。

标签: c# entity-framework


【解决方案1】:

虽然您尚未指定数据最终将如何提供给 Excel,但通常会提供一个 CSV (Comma Separated Values) 文件以便于导入。

因此,在这种情况下,您可以完全消除数据表转换并创建一个字符串列表,如下所示:

private List<string> ListaDatiReportQuietanzamento(List<DatiReportQuietanzamento> datiReportQuietanzamento)
{
     var result = new List<string>();
     foreach (var item in datiReportQuietanzamento)
     {
        result.AppendLine($"{item.n_polizza},{item.n_posizione},{item.c_frazionamento}");
     }

    return result;
}

现在我所做的唯一简化就是不用担心编码,因为字符串实际上应该被转义,所以 item.c_frazionamento 实际上应该被转义。

我建议您不要自己做这一切,而是看一下 NuGet 包,例如 CsvHelper,它可以帮助您创建 CSV 文件,并消除所有从等式中逃脱的麻烦。它还可以直接处理对象列表并将其转换为CSV文件,具体见https://joshclose.github.io/CsvHelper/writing#writing-all-records中的第一个示例

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-05
    • 2012-07-30
    • 2021-12-24
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多