1

我有数据表。现在,我正在将此数据表转换/导出为 csv。为此我的代码是:

var valueLines = dt.AsEnumerable()
                           .Select(row => string.Join(",", row.ItemArray));

在这里,假设我的字段是**Name Number Rollname RollNumber**. 在此查询触发后。它转换为:**Name,Number,Rollname,RollNumber**

这是工作。我得到完美的 csv 文件。但发出这个。假设一些归档值,例如:Roll,Number...当时。我在 csv 上获得 2 个字段/单元格......我正在考虑在字段值之前和之后添加 '。

或任何其他跳过问题的方法?

4

3 回答 3

4

CSV 接受用双引号括起来的项目。您可以通过如下修改代码来为每个项目加上双引号:

var valueLines = dt.AsEnumerable()
    .Select(row => string.Join(
        ","
    ,   row.ItemArray.Select(s => s.ToString().IndexOf(',') < 0 ? s : string.Format("\"{0}\"", s))));

上面替换row.ItemArraySelect检查每个项目的a ',',并在带有逗号的字符串周围加上双引号。

于 2013-07-13T12:01:59.330 回答
2

是的,一种方法是将字段用引号括起来,使用不同的分隔符,这种分隔符很少见,如^.

var valueLines = dt.AsEnumerable()
    .Select(row => string.Join(",", row.ItemArray
                                       .Select(f => string.Format("\"{0}\"", f))));

或者

var valueLines = dt.AsEnumerable()
    .Select(row => string.Join("^", row.ItemArray));

一般来说,您应该使用 CSV 阅读器,而不是阅读字符串并手动拆分它们。它们支持引用字符和更多功能。我可以推荐这个:

http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader

于 2013-07-13T12:01:29.367 回答
2

这很简单,请记住您可以将老式连接与 linq 混合使用:

    var valueLine = (来自 dt.AsEnumerable() 中的行
                     select "'" + row.Field("字段名") + "'").ToList();
    

于 2013-12-04T16:35:11.373 回答