【问题标题】:c# linq add single quote before & after field values on datatablec# linq 在数据表上的字段值之前和之后添加单引号
【发布时间】:2013-07-13 11:57:56
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • string.Join(",", "'" + row.ItemArray + "'")?
  • 不,它不工作......它转换为:'System.Object[]' 而不是字符串。
  • 是的...string.Join(",", row.ItemArray.Select(s => "'" + s + "'")) 那么?

标签: c# asp.net sql linq


【解决方案1】:

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,它检查每个项目的',',并在带有逗号的字符串周围加上双引号。

【讨论】:

  • 对象不包含 IndexOf 的定义 ...它要求我这样做。
  • 我对代码做了一点改动: var valueLines = dt.AsEnumerable() .Select(row => string.Join(",", row.ItemArray.Select(s => string.Format ("\"{0}\"", s))));它的工作。感谢您的努力。
  • 根据我的测试,"\"" + somestring + "\""string.Format("\"{0}\"", somestring) 快很多
  • 请注意,如果该字段还包含双引号,您仍然会得到一个无效的 CSV。你也想做一个 s.Replace("\"", "\"\"") 来处理这种情况。
【解决方案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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-12
      相关资源
      最近更新 更多