我有数据表。现在,我正在将此数据表转换/导出到csv。 因为我的代码是:
var valueLines = dt.AsEnumerable()
.Select(row => string.Join(",", row.ItemArray));
此处,假设我的字段为**Name Number Rollname RollNumber**
。
在此查询之后。它转换为:**Name,Number,Rollname,RollNumber**
这是工作。我正在获得完美的csv文件。但发出这个。
假设某些字段值如:Roll,Number
...那时候。我在csv上得到2个字段/单元格....我正在考虑添加'之前&在字段值之后。
或以其他方式跳过问题?
答案 0 :(得分:3)
CSV接受用双引号括起来的项目。您可以通过修改代码在每个项目周围加上双引号:
var valueLines = dt.AsEnumerable()
.Select(row => string.Join(
","
, row.ItemArray.Select(s => s.ToString().IndexOf(',') < 0 ? s : string.Format("\"{0}\"", s))));
上面用row.ItemArray
替换Select
,检查','
的每个项目,并在带逗号的字符串周围添加双引号。
答案 1 :(得分: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阅读器而不是阅读字符串并手动分割它们。它们支持引用字符和更多功能。我可以推荐一下:
答案 2 :(得分:0)
这很简单,记住你可以将旧学校连接与linq混合:
var valueLine = (from row in dt.AsEnumerable() select "'" + row.Field("field name") + "'").ToList();