2013-03-21 61 views
1

我需要從基於用戶提供的搜索過濾器LINQ查詢中刪除某些項目中刪除對象(在這種情況下,這將是一個代理的名稱)。ASP MVC/LINQ的 - 從查詢

基本上第一個查詢抓住從相關表中的所有信息,我需要過濾掉那些沒有與指定的對應名稱的人。

下面是我嘗試使用的代碼,但顯然followUpItems.Remove()是不是一個實際的方法,只是在尋找類似的規定。由於followUpItems被定義爲var而不是列表,我想知道這是否可能?

 var followUpItem = from follow in db.FollowUpItems 
          where (follow.TableName.Equals(TableName) || TableName.Equals("%")) && 
           (follow.IssueType.Equals(IssueType) || IssueType.Equals("%")) && 
           (follow.Status.Equals(Status) || Status.Equals("%")) 
          orderby follow.Id 
          select follow; 

     //Set display names 
     foreach (var item in followUpItem) 
     { 
      var key1 = int.Parse(item.Key1); 

      var name = (from a in db.Agent 
           where key1 == a.SymetraNumber 
           select a).Single(); 

      item.DisplayName = name.FirstName + " " + name.LastName; 
      if (!item.DisplayName.Equals(AgentName)) 
       followUpItem.Remove(item); 
     } 
+0

你究竟想要達到什麼目的? – MarcinJuraszek 2013-03-21 21:13:20

+0

哎呀,對不起。開始寫這個問題,然後被別的東西弄混了。更新了帖子。 – NealR 2013-03-21 21:15:55

+0

集合和IQueryable的平時應多恕我直言,followUpItems,所以你很清楚它代表了可變數量的項目,而不是單個項目。 – AaronLS 2013-03-21 21:19:47

回答

2
followUpItem = followUpItem.RemoveAll(i=> i.Id == item.Id); 

對不起,不會對IQueryable的工作。試試這個:

followUpItem = followUpItem.Where(i=> i.Id != item.Id); 

這假定Id的從不爲空。

您也可以建立一個「要刪除的項目」列表並呼叫.Except(itemsToRemove),LOOP。修改循環內的列表有時會讓你頭疼;)

followUpItem = followUpItem.Except(itemsToRemove); 
+0

.RemoveAll()不是一個System.Linq.IOrderedQueryable方法 – NealR 2013-03-21 21:21:43

+0

@NealR星爺我意識到,看到幾個其他選項的更新。 – AaronLS 2013-03-21 21:24:52

+0

@NealR最後一個選項可能更有效。有些LINQ方法不能保證順序得到維護,你必須在文檔中搜索以查看是否是順序。 – AaronLS 2013-03-21 21:26:25