2013-01-23 2 views
1

개체에 쉼표로 구분 된 숫자 ID 목록 인 문자열 속성이있는 개체 목록이 있습니다.쉼표로 구분 된 목록을 선택하는 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)); 

어떤 아이디어 :

현재 내 솔루션이 무엇입니까?

업데이트 :

목적은 다음과 같습니다 "1,2,3,4,5"

+0

'IdCsv'는 이미 쉼표로 구분 된 ID 문자열입니까? – digEmAll

+0

'.Select (id => Convert.ToInt32 (id)) ;;이 부분은 원래 질문에 없었기 때문에 문자열 목록을 int 배열로 구문 분석하려고한다고 생각했습니다. – Habib

+0

'객체'뒤에있는 클래스를 보여주십시오.'IdCsv'는 무엇입니까? –

답변

1

보십시오 :이 같은 자사의 문자열 속성 IdCsv 옵션이있을 수 있습니다

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

그리고이 클래스의 인스턴스 이 :

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

). 나중에 편집했습니다. –

관련 문제