2012-02-25 89 views
1

我想實現一些搜索條件,就像我想以最佳優化方式製作的那樣,我該如何實現?我怎樣才能達到這個搜索條件?

switch (e.CommandName) 
{ 
    case "DRESS": 
     chkItem.Items.Clear(); 
     chkItem.DataSource = cDressing.GetAllDressingDetail(cWebUtil.CurrClientID); 
     chkItem.DataTextField = "Description"; 
     chkItem.DataValueField = "DressingID"; 
     chkItem.DataBind(); 
     CurrBtnMode = btnMode.Dressing; 
     // ModalPopupExtender1.TargetControlID = ((Button)grdOrder.Rows[currItem.OrderItemID -1].FindControl("btnDress")).ID.ToString(); 

     if (currItem.DressingItems.Count > 0) 
     { 
     foreach(cOrderItemDressing itemDress in currItem.DressingItems) 
     { 
      // I want here to apply condtion for those chkItem object's DressingID exist in the itemDress objets's DressingID should 
      // have checked state in checkbox list to be populated. 
     } 
     } 

     ModalPopupExtender1.Show(); 
+0

我可以爲此使用一些lambda表達式嗎? – NoviceToDotNet 2012-02-25 10:50:24

+0

實際上我無法做到這一點。 – NoviceToDotNet 2012-02-25 11:01:28

回答

1

是你的目標,以檢查在有currItem.DressingItems集合中的匹配項的chkItem.Items的項目?我不知道這是否是你想要得到什麼,而是你可以試試這個:

... 
//uncheck all the items first (if you need it) 
foreach (var item in chkItem.Items) 
{ 
    item.Checked = false; 
} 

foreach(cOrderItemDressing itemDress in currItem.DressingItems) 
{ 

    bool chkItemFound = false; 
    foreach (var item in chkItem.Items) 
    { 
     //if the item is found, make it checked 
     if (item.DressingID == itemDress.DressingID) 
     { 
      item.Checked = true; 
      chkItemFound = true; 
      break; 
     } 
    } 
} 

我沒有測試此還,所以如果你使用它的時候有一些問題,只是讓我知道。

更新

你問,如果它是解決問題的最優化的方式。我會說有更多的優化方法,但我想保持代碼簡單,只顯示解決方案。 這可能就足夠了,但它取決於每個集合包含多少個項目。

我想,一個很簡單的方法來優化它將通過刪除已找到的項目來防止如此多的項目比較(因爲它不需要進一步比較)。這樣,集合可以在每次循環迭代時縮小,使其工作更快。但是,您可能需要創建要修改的集合的副本,以便訪問原始表單(並注意分配此數組可能需要一些時間)。 另一種方法是使用排序後的集合併爲它們實現某種搜索算法。這將使搜索過程本身更快,但需要一些額外的時間來對集合進行排序(排序也可以通過以排序形式創建集合來實現,因此以後不需要排序)。

可能還有其他一些方法可以做到這一點,但它可能取決於應用程序其他部分的細節以及您希望使用的數據量。

+0

它的工作原理,但它是最優化的方式,或其他解決方案? – NoviceToDotNet 2012-02-28 06:29:21

+1

我已經更新了有關可能的優化的一些信息的答案。 – 2012-02-28 19:39:25