2012-02-25 2 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

Могу ли я использовать какое-то выражение лямбда для этого. – NoviceToDotNet

+0

Фактически я не могу это сделать. – NoviceToDotNet

ответ

1

ли Вы цель проверить элементы в chkItem.Items, которые имеют совпадающий элемент в currItem.DressingItems коллекции? Я не уверен, если это то, что вы хотите получить, но вы можете попробовать это:

... 
//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; 
     } 
    } 
} 

Я не проверял это еще, так что если у вас есть какие-то проблемы при его использовании, просто дайте мне знать.

Update

Вы спросили, если это самый оптимизированный способ решения этой проблемы. Я бы сказал, что есть более оптимизированные методы, но я хотел, чтобы код был простым, чтобы просто показать решение. Этого может быть достаточно, но это зависит от того, сколько элементов содержится в каждой коллекции.

Я полагаю, что довольно простой способ его оптимизации будет препятствовать сравнению многих элементов, удалив элемент, который вы уже нашли (потому что он не нужен для дальнейших сравнений). Таким образом, коллекция может сокращаться с каждой итерацией цикла, что делает работу быстрее. Однако вам может понадобиться создать копию коллекции, которую вы хотите изменить, чтобы иметь доступ к ее первоначальной форме (и помните, что выделение этого массива может занять некоторое время). Другой способ - использовать отсортированные коллекции и реализовать для них какой-то алгоритм поиска. Это ускорит процесс поиска, но потребует дополнительного времени для сортировки коллекций (сортировка также может быть реализована путем создания коллекции в отсортированной форме, поэтому сортировка не требуется позже).

Возможно, есть другие способы сделать это, но это может зависеть от деталей других частей вашего приложения и количества данных, с которыми вы хотите работать.

+0

Это работает, но это самый оптимизированный способ сделать это, или существуют другие решения? – NoviceToDotNet

+1

Я обновил ответ с некоторой информацией о возможных оптимизации. –

Смежные вопросы