2011-03-20 2 views
1

foreach가 foreach 내에 있고 LINQ로 변환하고 싶습니다. 그것은 단지 1 foreach 경우 어디에 내가 사용할 수 있지만 혼란스러워 .. 여기 내 코드, 어떤 도움을 정말 감사합니다.LINQ : foreach를 LINQ 내에서 처리하는 데 도움이 - 가능하다면

기본적으로 인보이스를 찾을 필요가 있지만 메타 데이터는 2 레벨 아래에 따라 다릅니다. 나는 그 코드가 자명하다라고 생각한다.

currentMetaData >>> Is created outside of the foreach code 
its an object...but the code below works.. 

foreach (var item in this.invoices.Items) 
{ 
    foreach (var metaData in item.MetaDatas) 
    { 
    if (metaData == currentMetaData) 
    { 
     name = item.Name; 
     break; 
    } 
    } 
} 

나는 LINQ를 사용하여이를 줄이려고합니다. 이것이 가능한가?

답변

1

이것은 단지 첫 번째 값 기존 루프에서 break; 문을 시뮬레이션하는 모든 이름

var name = 
      from i in this.invoices 
      from m in i.Metadata 
      where m == currentMetadata 
      select i.Name; 

을 줄 것입니다.

string name = 
      (from i in this.invoices 
      from m in i.Metadata 
      where m == currentMetadata 
      select i.Name).First(); 
+0

위대한 물건 .. 감사합니다! .. 나는 2 개의 Froms가 있기 때문에 LAMBDA로 변환 할 수 없다고 생각 하는가 ?? 그 맞습니까? – Martin

+0

@Martin : 아니, SelectMany 호출을 사용하여 람다 형식을 사용할 수 있습니다. –

+0

왜 여기에 ToList를 호출 했습니까? 아무 것도 유용하지 않을 것입니다. 사실, First (첫 번째 요소에 도달하자마자 쿼리를 평가하는 것을 중지하는 것입니다)를 사용하는 지점의 일부를 제거합니다. –