2009-05-22 57 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); 
相关问题