2013-08-18 20 views
0

我用我的篩選對象的代碼是這樣的:IQueryable的不適合不行等於

var dynamicdataentrances = db.DynamicDataEntrances.OrderByDescending(d => d.ID) 
                .AsQueryable(); 
if (TypeID != null) 
    dynamicdataentrances = 
     dynamicdataentrances.Where(d => d.DetailPageID == TypeID).AsQueryable(); 
if (RegionID != null) 
    dynamicdataentrances = 
     dynamicdataentrances.Where(d => d.RegionID == RegionID).AsQueryable(); 
if (ShiftGroupID != null) 
    dynamicdataentrances = 
     dynamicdataentrances.Where(d => d.ShiftPlan.ShiftGroupID == ShiftGroupID) 
          .AsQueryable(); 

和它的作品沒有任何問題。但是,根據「工作流程狀態」篩選對象不起作用。它的代碼是這樣的:

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

正如你可以看出,我使用複選框進行過濾;如果未選中「工作流狀態」複選框,則會獲得其工作流狀態不等於未選中狀態的對象。我調試了這些行,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();