2011-04-06 5 views
0

LINQ를 사용하도록 다음 코드를 변환하는 데 문제가 있습니다.개체 및 문자열 배열을 참조하는 Linq 쿼리

int occurs = 0; 
foreach (string j in items) 
{ 
if (!string.IsNullOrEmpty(j)) 
      { 
       WorkflowModule tempWM = new WorkflowModule(j); 
       if (tempWM.StateID == item.StateID) 
       { 
        occurs++; 
       } 
      } 
     } 
     return occurs; 

지금까지 내가 가지고있다 -

var lstItems = (from lstItem in items 
         where !string.IsNullOrEmpty(lstItem) 
         let objWorkflowModule = new WorkflowModule(lstItem) 
         select new 
         { 
          tempWM = objWorkflowModule.StateID 
         }).Where(item.StateID == tempWM)); 

     return lstItems.Count(); 

하지만 인텔리이

사람이 저를 달성 할 수

라인 '어디에요 (item.StateID == tempWM))를'좋아하지 않는있다 이?

감사합니다. 하면 "선언"해야 앞 부분의 결과를 보유하는 변수 x 말하면

... 
}).Where(x => x.tempWM == item.StateID)); 

: 만약있어서 구문을 사용할 때

답변

6

, 당신은 Where 연산자 람다를 사용할 필요 쿼리의

+0

아이템이 원래 코드 외부에서 정의 된 변수 인 것 같기 때문에 실제로'Where (t => t.tempWM == item.StateID) '를 원한다고 생각합니다. – juharr

+0

@juharr, 감사합니다. 답변을 업데이트했습니다. –

0

항목이 진술의 어느 위치에서나 초기화 된 것처럼 보이지 않습니다. 여기

0

가 제출 한 원본 코드의 외부에 정의 된 변수입니다 내가 항목을 있으리라 믿고있어이

var lstItems = from lstItem in items 
       where !string.IsNullOrEmpty(lstItem) 
       let objWorkflowModule = new WorkflowModule(lstItem) 
       select objWorkflowModule.StateID; 

return lstItems.Count(t=> t == item.StateID); 

을 할 거라고 방법입니다. 기본적으로 쿼리에 익명 클래스를 만들 필요가 없으며 대신 Where을 술어를 Count에 넣을 수 있습니다. 그러나 다른 사람들이 주된 이슈는 당신이 당신의 술어를 람다 (lambda)로 표현할 필요가 있다고 말한 것입니다.

관련 문제