2013-11-29 4 views
-4

У меня есть DataTable, который возвращает результат одного столбца, состоящий из нескольких значений, разделенных запятыми.Сплит-значения, разделенные запятыми из datatable

Как разбить эту колонку DataTable на основе запятых?

С помощью

+1

Любые усилия до сих пор? –

+1

String.Split возвращает массив – Steffe

ответ

1

Каков желаемый результат?

Если вы хотите string[], который содержит все значения:

string[] allValues = dt.AsEnumerable() 
    .SelectMany(r => r.Field<string>(0).Split(',')) 
    .ToArray(); 

Если вы просто хотите IEnumerable<string[]> где каждый элемент содержит все значения строки:

IEnumerable<string[]> allRowValues = dt.AsEnumerable() 
    .Select(r => r.Field<string>(0).Split(',')); 

В любом случае я использую String.Split для получения string[] из разделенных запятой string.

Edit: «я имею список, который я хочу, чтобы заполнить»

Тогда вы можете либо привести их к object, если вы действительно нуждаетесь в них в качестве объекта:

List<object> allValues = dt.AsEnumerable() 
    .SelectMany(r => r.Field<string>(0).Split(',')) 
    .Select(str => (object) str) 
    .ToList(); 

или использования List.AddRange если у вас уже есть список, который вы хотите использовать:

var allValues = dt.AsEnumerable() 
    .SelectMany(r => r.Field<string>(0).Split(',')) 
    .Select(str => (object) str); 

objectList.AddRange(allValues); 
+0

У меня есть «Список », который я хочу заполнить – roohan

+0

Почему вы хотите использовать 'object', если это на самом деле строка? Но вы можете легко скомпоновать объект и использовать 'ToList' вместо' ToArray'. Или используйте 'List.AddRange', чтобы добавить их. –

+0

@roohan: однако я отредактировал свой ответ, чтобы показать вам, как это работает. –

0

попробовать это:

//fruit dtcolumn values 
string fruit = "Apple,Banana,Orange,Strawberry"; 
string[] split = fruit.Split(','); 

foreach (string item in split) 
{ 
    Console.WriteLine(item); 
} 
+0

Где находится ваш 'DataTable'? –

0

Попробуйте

//datatable should contain result set 
DataTable datatable = new DataTable(); 
datatable = YourQuery(); 

if (datatable.Rows.Count > 0) 
{ 
    foreach(int count=0;count < datatable.Rows ; count++) 
    { 
    string result = datatable.Rows[count]; 
    string[] array = result.split(,); 
    //do what you want to do 
    } 
} 
Смежные вопросы