2009-05-22 14 views
1

私は、nvarcharとして格納されているID(​​int)のコンマ区切りのリストを含むDBテーブルを持っています。スプリットを行い、結果をintに変換する最も良い方法

私はリストとして1ヒットでこれらを返す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)); 

それは.NET 3.0のLINQの拡張を使用しています。 、あなたがC#3.0を使用していない場合は

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

もう一度お返事をさせていただきます。 –

+0

@Joel:私は最善を尽くしていますが、最近はやることが大変でした。 :-( –

+0

ありがとう!ちょうど私が必要なもの –

1

:代替(1つのラムダを節約する)として、あなたも間違いなく読みにくくしているこれを行うことができます

// 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:

あるいは、Kあたりとしても、単純またはLINQのファンではありません、あなたはそれをC#2.0の方法を行うことができますonradの提案:

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

:あなたがこれを行うことができますLINQで

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

'StringToInt'ラッパーは必要ありません。' int.Parse'は 'Converter'オブジェクトに直接作ることができます。 –

関連する問題