c#linq在&之前添加单引号在数据表之后的字段值之后

时间:2013-07-13 11:57:56

标签: c# asp.net sql linq

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

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

此处,假设我的字段为**Name Number Rollname RollNumber**。 在此查询之后。它转换为:**Name,Number,Rollname,RollNumber**

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

或以其他方式跳过问题?

3 个答案:

答案 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阅读器而不是阅读字符串并手动分割它们。它们支持引用字符和更多功能。我可以推荐一下:

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

答案 2 :(得分:0)

这很简单,记住你可以将旧学校连接与linq混合:     

    var valueLine = (from row in dt.AsEnumerable()
                     select "'" + row.Field("field name") + "'").ToList();