Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c linq在datatable上的字段值之前和之后添加单引号_C#_Asp.net_Sql_Linq - Fatal编程技术网

C# c linq在datatable上的字段值之前和之后添加单引号

C# c linq在datatable上的字段值之前和之后添加单引号,c#,asp.net,sql,linq,C#,Asp.net,Sql,Linq,我有数据表。现在,我正在将此数据表转换/导出为csv。 为此,我的代码是: var valueLines = dt.AsEnumerable() .Select(row => string.Join(",", row.ItemArray)); 这里,假设我的字段是**Name Number Rollname Rollname**。 在这一询问之后,我就开火了。它转换为:**名称、编号、Rollname、RollNumber** 这是工

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

var valueLines = dt.AsEnumerable()
                           .Select(row => string.Join(",", row.ItemArray));
这里,假设我的字段是**Name Number Rollname Rollname**。 在这一询问之后,我就开火了。它转换为:**名称、编号、Rollname、RollNumber**

这是工作。我得到csv文件完美。但问题是。 假设某个字段值,比如:Roll,Number…当时。我在csv上得到2个字段/单元格…我想添加“前后字段值”


或者有其他跳过问题的方法吗?

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

通常,您应该使用CSV读取器,而不是读取字符串并手动拆分它们。它们支持引用字符和更多功能。我可以推荐:


是的,一种方法是使用不同的分隔符(如^)将字段括在引号中

通常,您应该使用CSV读取器,而不是读取字符串并手动拆分它们。它们支持引用字符和更多功能。我可以推荐:


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

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

上面用一个Select替换row.ItemArray,该Select检查每个项目的“,”,并在带有逗号的字符串周围加上双引号。

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

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

上面用一个Select替换row.ItemArray,该Select检查每个项目是否有“,”,并在带有逗号的字符串周围加上双引号。

这很简单,请记住,可以将老式的串联与linq混合使用: var valueLine = (from row in dt.AsEnumerable() select "'" + row.Field("field name") + "'").ToList();

这很简单,请记住,您可以将老式连接与linq混合使用: var valueLine = (from row in dt.AsEnumerable() select "'" + row.Field("field name") + "'").ToList();

string.Join,,“+row.ItemArray+”?不,它不起作用…它的转换方式是:“System.Object[]”而不是字符串。是的。。。string.Join,,row.ItemArray.Selects=>“+s+”,然后?string.Join,“+row.ItemArray+”?不,它不工作…它的转换方式是:“System.Object[]”而不是字符串。是的。。。string.Join,,row.ItemArray.Selects=>'+s+'然后?对象不包含IndexOf的定义…它要求我这样做。我对代码做了一些更改:var valueLines=dt.AsEnumerable.Selectrow=>string.Join,,row.ItemArray.Selects=>string.Format\{0},s;谢谢你的努力。根据我的测试,\+somestring+\比string.Format\{0}和somestringNote快得多。请注意,如果该字段还包含双引号,你仍然会得到无效的CSV。你想做一个s.Replace\,\ \来处理这种情况。对象不包含IndexOf的定义…它要求我这样做。我对代码做了一些更改:var valueLines=dt.AsEnumerable.Selectrow=>string.Join,,row.ItemArray.Selects=>string.Format\{0},s;谢谢你的努力。根据我的测试,\+somestring+\比string.Format\{0}和somestringNote快得多。请注意,如果该字段还包含双引号,你仍然会得到无效的CSV。你想做一个s.Replace \,\\来处理这种情况。