2013-08-18 3 views
0

같습니다. 그러나 "워크 플로 상태"에 따라 개체 필터링은 작동하지 않습니다. 그 코드는 다음과 같습니다 :내가 내 개체를 필터링하는 데 사용하는 코드는 같다

foreach (var wfs in workflowstates) 
{ 
    if (Request[wfs.ID.ToString()] != wfs.ID.ToString()) 
     dynamicdataentrances = 
     dynamicdataentrances.Where(d => d.WorkflowStateRelation.WorkflowStateID 
              != wfs.ID).AsQueryable(); 
} 

알아낼 수있는 것처럼 나는 필터링을 위해 체크 박스를 사용합니다. Workflow State의 체크 박스를 체크하지 않으면 Workflow State가 체크되지 않은 객체를 얻습니다. 내가 foreach 라인을 디버깅하고 블록이 올바르게 작동하고 있지만 쿼리가 그에 따라 작동하지 않으면 모든 객체를 계속 가져옵니다. 이 버그입니까 아니면 내가 잘못하고있는 거지?

워크 플로 상태 필터링 전에 개체 컬렉션을 리스트으로 설정하면 올바르게 작동합니다.

답변

0

목록 개체는 이미 메모리에 있고 모든 체크되지 않은 상태에 대해 동일한 개체가 제외되어 있기 때문에 작동합니다.

그러나 IQueryable 개체는 데이터베이스에 있으며 각 단계의 목록에서 제외되어 있지 않으므로 쿼리는 모든 개체를 가져옵니다.

var unCheckedStates = new List<int>(); 
foreach (var wfs in workflowstates) 
{ 
    if (Request[wfs.ID.ToString()] != wfs.ID.ToString()) 
    { 
     unCheckedStates.Add(wfs.ID); 
    } 
} 
dynamicdataentrances = 
    dynamicdataentrances.Where(d => !unCheckedStates 
         .Contains(d.WorkflowStateRelation.WorkflowStateID)) 
         .AsQueryable(); 
:

내가 가진 솔루션을 가지고