2010-06-17 5 views
2

개체 집합을 반환하는 IQueryable (PartHistories)이 있습니다. 이 질문 (rc는 목록)을 변경하는 Phase라는 열거 형이 있습니다."linq where"속성을 확인하지 못합니다?

  var query = this.PartHistories; 
      if (Phase.Repair == _Phase) 
      { 
       query = query.Where(ph => ph.RemovedInRepair == false); 
      } 
      else 
      { 
       query = query.Where(ph => ph.PartPhaseID != (int)Phase.Repair); 
      } 
      rc.AddRange(query 
       .ToList()); 

이것은 작동합니다.

이제 문제의 객체 (PartHistory)에는 PartPhaseID를 위상으로 변환하는 PartPhase 속성이 있습니다. 이 코드는, 그러나, (변화가 Phase.Repair 라인에) 작동하지 않습니다.

  var query = this.PartHistories; 
      if (Phase.Repair == _Phase) 
      { 
       query = query.Where(ph => ph.RemovedInRepair == false); 
      } 
      else 
      { 
       query = query.Where(ph => ph.PartPhase != Phase.Repair); 
      } 
      rc.AddRange(query 
       .ToList()); 

을 AddRange에서 예외가 "회원 'PartPhase'는 지원되지 않습니다됩니다

을 마지막으로, 다음 코드는 작동하지만,이 경우, 어디 목록의 확장이며 (내가 생각하는)이 모든 PartHistories가 수집 된 후 적용

  if(Phase.Repair == _Phase) 
      { 
       rc.AddRange(this.PartHistories.ToList() 
        .Where(ph => ph.RemovedInRepair == false)); 
      } 
      else 
      { 
       rc.AddRange(this.PartHistories.ToList() 
        .Where(ph => ph.PartPhase != Phase.Repair)); 
+1

.ToList() 다음에 .where가 실행되는 마지막 코드 샘플에서 올바른지 확인하십시오. LINQ (개체, IQueryable보다는 IEnumerable) 및 속성에 문제가 없었습니다. 그래서 문제는 아직 나에게 뛰어 오르는 것이 아닙니다. –

+0

Phase 및 PartPhase 클래스의 모습에 대해 좀 더 자세히 설명해 줄 수 있습니다. PartPhase는 Repair와 같은 유형입니까? –

+0

단계는 단지 열거 형입니다. PartPhase는 Phase로 캐스트 된 int를 반환하는 PartHistory의 속성입니다. 따라서 PartPhase는 Repair와 동일한 유형입니다. 둘 다 위상입니다. –

답변

2

이 Linq는이 SQL에 경우, 예, 그렇습니다 사용자 지정 메서드 호출을 지원하지 않습니다. 식을 S로 변환 할 수 있습니다. QL 쿼리를 수행하지만 귀하의 재산 내에서 어떤 일이 발생하는지 모릅니다. 따라서 사용자 정의 메서드 및 속성은 SQL로 변환 할 수 없습니다.

Expression<Func<PartHistory, PartPhase>>을 만들면 (사용자 지정 메서드를 호출하지 않고) 속성이 수행하는 것과 동일한 작업을 수행 할 수 있다면 작동 할 것입니다.

+0

이것은 안전한 가정과 같습니다. – Marc

+0

감사합니다. 이것은 의미가 있습니다 (SQL은 내 사용자 정의 속성을 이해하지 못합니다). 나는 표현식을 만드는 방법에 대해 연구해야 할 것이다. :) 그러나 지금은 첫 번째 예제의 코드보다 훨씬 잘 할 수 없다고 생각한다. –

관련 문제