2013-01-23 61 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

你是對的,他後來編輯它。 –