2013-01-23 56 views
1

我有一个对象列表,其中的对象有一个字符串属性,它是逗号分隔的数字Ids列表。Linq查询选择逗号分隔列表

提取逗号分隔值并获取int数组的最有效方法是什么?

目前我的解决办法是这样的:

var allCsvs = objects 
    .Select(o => o.IdCsv); // the IdCsv is a string property, ie "1,2,3,4,5" 
var allIds = string.Join(",", allCsvs); 
var idArray = allIds.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries) 
    .Select(id => Convert.ToInt32(id)); 

对此处提高性能的任何想法?

更新:

的对象可能是这样的:

class MyClass { 
    public string IdCsv { get; set; } 
} 

这个类的一个实例,可能有其字符串属性IdCsv设置为这样的事情:"1,2,3,4,5"

+0

为了理解,'IdCsv'已经是逗号分隔的id字符串了吗? – digEmAll

+0

'.Select(id => Convert.ToInt32(id));;'这部分不在你原来的问题中,这使我认为你想将字符串列表解析为int数组。 – Habib

+0

请向我们展示'objects'背后的类,什么是'IdCsv'? –

回答

1

尝试此:

internal class Csv 
{ 
    public string CommaSepList { get; set; } 
} 


var allCsvs = 
    new List<Csv> 
     { 
      new Csv 
       { 
        CommaSepList = "1,2,3,4,,5" 
       }, 
      new Csv 
       { 
        CommaSepList = "4,5,7,,5,," 
       }, 
     }; 

int[] intArray = 
    allCsvs 
     .SelectMany(c => c.CommaSepList.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) 
     .Select(int.Parse) 
     .ToArray(); 

int[] intArray = 
    allCsvs 
     .SelectMany(c => c.CommaSepList.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse)) 
     .ToArray(); 
+0

只有当idCSV是一个字符串而不是IEnumerable 时才有效。 –

+0

@TimSchmelter从OP“//IdCsv是一个字符串属性,即”1,2,3,4,5“” –

+0

你是对的,他后来编辑它。 –