2009-05-22 1 views
1

У меня есть таблица DB, которая содержит список идентификаторов (ints), разделенных запятыми, которые хранятся как nvarchar.Лучший способ сделать split и преобразовать результат в ints

У меня есть метод get, который возвращает их одним ударом как список. На данный момент я думаю, что мне нужно будет сделать что-то вроде этого:

List<int> ids = new List<int>(); 
string[] pageids = experssion.Split(separators) 

foreach (string number in pageids) 
{ 
    ids.Add(Convert.ToInt32(number)); 
} 

Может ли кто-нибудь подумать о более удобном способе сделать это? Могу ли я все это сделать на расколе?

+0

ОТВЕТСТВЕННОСТЬ: Я не понимаю, для чего нужна переменная pageids. –

+0

, чтобы попытаться сделать объяснение понятным. Я тупо положил раскол на foreach –

+0

, поэтому вы не должны пытаться хранить несколько значений в одном поле db ... он всегда возвращается, чтобы преследовать вас. – rmeador

ответ

11

я бы ему так:

var ids = expression.Split(separator).Select(s => int.Parse(s)); 

Он использует расширение Linq из .NET 3.0. В качестве альтернативы (сохраняет один лямбда), вы также можете сделать это, которое, возможно, менее читаемыми:

var ids = expression.Split(separator).Select((Func<string, int>)int.Parse); 
+0

Приятно видеть, что вы снова отвечаете. –

+0

@Joel: Я делаю все возможное, но в последнее время мне очень нужно было ... и это не изменится. :-( –

+0

спасибо, только что мне нужно –

1

С помощью LINQ вы можете сделать это:

List<int> ids 
    = expression 
    .Split(separators) 
    .Select(number => Convert.ToInt32(number)) 
    .ToList() 
3

Если вы не используете C# 3.0, или не поклонник LINQ, вы могли бы сделать это так, как C# 2.0:

// This gives you an int[] 
int[] pageids = Array.ConvertAll(expression.Split(separator), new Converter<string,int>(StringToInt)); 

// Add each id to the list 
ids.AddRange(pageids); 

public static int StringToInt(string s) 
{ 
return int.Parse(s); 
} 

EDIT:

или еще проще, так как на к предложение onrad:

int[] pageids = Array.ConvertAll<string,int>(expression.Split(separator),int.Parse); 
ids.AddRange(pageids); 
+0

Вам не нужна оболочка 'StringToInt':' int.Parse' может быть непосредственно преобразована в объект 'Конвертер'. Но кроме этого, хорошая альтернатива. –

Смежные вопросы