2015-07-24 5 views
0

Я пытаюсь получить список моих столбцов DataTable. DataTable содержит строки и столбцы, когда я запускаю программу, так что это не null. Это LINQ Я использую:ArgumentOutOfRangeException При попытке получить список столбцов DataTable

List<string> columnNames = dt.Columns.Cast<DataColumn>(). 
            Select(column => column.ColumnName).ToList(); 

И я получаю следующее ArgumentOutOfRangeException:

StartIndex не может быть меньше нуля.

Стек след:

at System.String.Remove(Int32 startIndex) 
    at Prospect.DataHelper.WriteDatatableToCsv(DataTable dt, String path, String fileName, String delimeter) in c:\xxxxxxxxxx\DataHelper.cs:line 400 
    at Prospect.Contacts.<>c__DisplayClass21.<btnWrite_Click>b__20() in c:\xxxxxxxxxxx\Contacts.cs:line 684 
    at System.Threading.Tasks.Task.Execute() 
+0

Вы DataTable 'dt' может иметь no column –

+0

Проверить 'if (dt.Columns.Count> 0)' –

+3

Код, который вы указали, не является кодом в трассировке стека. (Где вызов «Удалить»?) Пожалуйста, предоставьте краткую, но полную программу, демонстрирующую проблему. –

ответ

1

К сожалению, я не очень хорошо с LINQ, но почему бы вам не попробовать это:

Console.WriteLine("My table has: " + dt.Columns.Count + " columns."); //just for testing 
List<string> columnNames = new List<string>(); 
foreach (DataColumn column in dt.Columns) 
{ 
    columnNames.Add(column.ColumnName); 
} 
Смежные вопросы