如何格式化数组中的字符串?

时间:2013-11-29 11:20:57

标签: c# linq

我有这段代码

StringBuilder sb = new StringBuilder();
var columnNames = dt.Columns
    .Cast<DataColumn>()
    .Select(column => "\"" + column.ColumnName.Replace("\"", "\"\"") + "\"")
    .ToArray();
sb.AppendLine(string.Join(",", columnNames));
foreach (DataRow row in dt.Rows)
{
   var fields =   row.ItemArray
        .Select(field => "\"" + field.ToString().Replace("\"", "\"\"") + "\"")
        .ToArray();
   sb.AppendLine(string.Join(",", fields));
}
row[1]row[2]中的

这些是日期,我希望它们采用这种格式

string.Format("{0:yyyy-MM-dd HH:mm:ss.fffffff}", row[1]);

我该怎么做?

3 个答案:

答案 0 :(得分:5)

Select的重载,它将值和索引的函数作为参数;您可以使用它根据索引应用不同的格式。以下示例显示了格式化值的函数。此功能用于代码中的选择:

private string FormatStringByIndex(object field, int index)
{
    if (index > 0 && index < 3)
        return string.Format("{0:yyyy-MM-dd HH:mm:ss.fffffff}", field);}
    else
        return field.ToString();
}

// ...

StringBuilder sb = new StringBuilder();
var columnNames = dt.Columns.Cast<DataColumn>().Select(column => "\"" + column.ColumnName.Replace("\"", "\"\"") + "\"").ToArray();
sb.AppendLine(string.Join(",", columnNames));
foreach (DataRow row in dt.Rows)
{
   var fields =   row.ItemArray.Select((field, index) => "\"" + FormatStringByIndex(field, index).Replace("\"", "\"\"") + "\"").ToArray();
   sb.AppendLine(string.Join(",", fields));
}

答案 1 :(得分:0)

如果列包含DateTime类型,则只需执行此操作。

var formatted = ((DateTime)row[1]).ToString("yyyy-MM-dd HH:mm:ss.fffffff");

否则您需要先将其转换为DateTime,然后再调用DateTime.ToString(format)

答案 2 :(得分:0)

foreach循环中,您可以执行以下操作:

var dateFormat = "{0:yyyy-MM-dd HH:mm:ss.fffffff}";

var dateColumns = new[] { 1, 2 };

var fields = itemArray.Select((e, i) =>
{
    if (dateColumns.Contains(i))
        return String.Format(dateFormat, e);

    return e.ToString();
});