2012-05-22 2 views
2

쉬운 시나리오에 묶여 있습니다. , 내가 LINQ의에 그 루프를 변경하는 방법 궁금하네요foreach 루프를 LINQ 쿼리로 변경하십시오.

item_1_2_generatedGUID //generatedGUID is Guid.NewGuid() 

하지만 훨씬 더 많은 숫자 이제 item_1_2_3_4_5_generatedGUID

이있을 수있다 : 나는 그것의 모든 항목이의 몸을 가지고하는 List<string> 개체가 질문. 어떤 아이디어?

string one = "1"; //an exaplme 
    string two = "2"; //an exaplme 

    foreach (var item in myStringsList) 
    { 
     string[] splitted = item.Split(new char[] { '_' }, 
            StringSplitOptions.RemoveEmptyEntries); 

     if(splitted.Length >= 3) 
     { 
      if(splitted[1] == one && splitted[2] == two) 
      { 
       resultList.Add(item); 
      } 
     } 
    } 
+0

당신은'다시 sharper'를 사용하고 아무것도 :) – sarwar026

답변

2

이 시도 :

var query = from item in myStringsList 
      let splitted = item.Split(new[] { '_' }, SSO.RemoveEmptyEntries) 
      where splitted.Length >= 3 
      where splitted[1] == one && splitted[2] == two 
      select item; 

var resultList = query.ToList(); 
+0

I을 제시 여부를 확인하실 수 있습니다 생각 splitted 문자열 유형의 것입니다 ... 그리고 그가 원하는 것은 배열의 길이를 확인하는 것입니다. – ivowiblo

+0

@ivowiblo :'splitted'는'string []'타입입니다. 그것은'item.Split'의 반환 값입니다. – dtb

+0

@ivowiblo : 왜 문자열이어야합니까? 'Split'은 문자열의 배열을 반환하므로'splitted'는 문자열의 배열이어야합니다, 그렇지 않습니까? 내가 틀렸다면 나를 바로 잡아라. – sarwar026

4
var result = from s in lst 
      let spl = s.Split('_') 
      where spl.Length >= 3 && spl[1] = one && spl[2] == two 
      select s; 
+0

그리고 값의 검사 ?? – ivowiblo

+0

@ivowiblo, 처음에 질문을 잘못 읽었습니다. 내 업데이트를 참조하십시오. –

2

이 다른 접근 방식 :

var items = myStringsList. 
      Where(x => x.Substring(x.IndexOf("_")).StartsWith(one+"_"+two+"_")); 

당신은 아마 같이 IndexOf에 +1을 추가해야합니다,하지만 난 확실하지 않다. 그것은 무엇을

은 다음과 같습니다

  • 은 첫 번째 항목 (즉에 대한 문자열이다)를 제거합니다. 귀하의 예에서 "1_2_3_4_5_generatedGUID"이어야합니다.
  • 문자열이 예상하는 것으로 시작하는지 확인합니다. 당신의 예에서 : 1_2_
+0

좋은 트릭 :) +1 –

0

편집 : 최초의 "위치"에 아무것도 패턴을 추가

var result = items.Where(i => Regex.IsMatch(i, "^[^_]_1_2_")); 
+0

'item_'로 시작한다고 생각하지 않습니다, 그냥 샘플입니다. –

+0

@SaeedAmiri : 그렇다면, [^ _]로 항목 바꾸기 – Codism

+0

정규 표현식에 대해 아무것도 몰라 :)하지만 대답을 편집하는 것이 좋습니다. –

관련 문제