2009-05-22 50 views
1

我有一個數據庫表,其中包含以逗號分隔的存儲爲nvarchar的ID(整數)列表。做一個拆分並將結果轉換爲整數的最佳方法

我有一個get方法在一次打擊中返回這些列表。目前我認爲我必須這樣做:

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

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

任何人都可以想到一個更好的方法來做到這一點?我可以以某種方式做到這一切嗎?

+0

順便說一句:我沒有得到什麼是pageid變量的好處。 – 2009-05-22 15:07:47

+0

嘗試使解釋更清楚。我愚蠢地把分裂的foreach – 2009-05-22 15:15:33

+0

這就是爲什麼你不應該嘗試在單個數據庫字段中存儲多個值...它總是回來困擾你。 – rmeador 2009-05-22 15:20:56

回答

11

我最好給它這樣的:

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

它使用的.NET 3.0的LINQ的擴展。作爲替代(節省一個拉姆達),你也可以做到這一點是無疑的可讀性:

var ids = expression.Split(separator).Select((Func<string, int>)int.Parse); 
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); 
} 

編輯:

或者,即使按ķ簡單onrad的建議:

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