public static void WriteCsv ( this DataView dataView, TextWriter writer, string fieldSeparator, string recordSeparator, IEnumerable <string> columnsToWrite = null ) { dataView.ThrowIfNull("dataView"); writer.ThrowIfNull("writer"); fieldSeparator.ThrowIfNull("fieldSeparator"); recordSeparator.ThrowIfNull("recordSeparator"); if (columnsToWrite == null || columnsToWrite.Count() == 0) { columnsToWrite = dataView.ColumnNames(); } else { var unknownColumns = columnsToWrite.Except(dataView.ColumnNames(), StringComparer.OrdinalIgnoreCase); if (unknownColumns.Count() > 0) { throw new ArgumentException("There are unknonwn columns."); } } // Write column headings. foreach (string column in columnsToWrite) { writer.Write(column); writer.Write(fieldSeparator); } writer.Write(recordSeparator); // Write data. foreach (DataRowView row in dataView) { bool first = true; foreach (string columnName in columnsToWrite) { var column = row[columnName]; if (!first) { writer.Write(fieldSeparator); } writer.Write(column.ToString()); first = false; } writer.Write(recordSeparator); } }