Asp.net 如何实现此搜索条件?
我想实现一些搜索条件,比如下面我想以最佳优化的方式实现的条件,我怎样才能实现呢Asp.net 如何实现此搜索条件?,asp.net,Asp.net,我想实现一些搜索条件,比如下面我想以最佳优化的方式实现的条件,我怎样才能实现呢 switch (e.CommandName) { case "DRESS": chkItem.Items.Clear(); chkItem.DataSource = cDressing.GetAllDressingDetail(cWebUtil.CurrClientID); chkItem.DataTextField = "Description"; chkIte
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();
您的目标是检查
chkItem.items
中在curroitem.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;
}
}
}
我还没有测试过这个,所以如果你在使用它时遇到了一些问题,请告诉我
更新
你问这是否是解决问题的最佳方式。我想说还有更多优化的方法,但我想让代码保持简单,只显示解决方案。
这可能足够了,但这取决于每个集合包含多少项
我认为一个非常简单的优化方法是通过删除一个已经找到的项目(因为在进一步的比较中不需要它)来防止如此多的项目比较。这样,集合可以随着每次循环迭代而收缩,使其工作得更快。但是,您可能需要创建要修改的集合的副本,以便访问其原始形式(请注意,分配此数组可能需要一些时间)。
另一种方法是使用已排序的集合并为它们实现某种搜索算法。这将使搜索过程本身更快,但需要一些额外的时间来对集合进行排序(也可以通过在已排序的表单中创建集合来实现排序,因此以后不需要排序)
可能还有其他方法,但这可能取决于应用程序其他部分的详细信息以及您希望它使用的数据量。您的目标是检查
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;
}
}
}
我还没有测试过这个,所以如果你在使用它时遇到了一些问题,请告诉我
更新
你问这是否是解决问题的最佳方式。我想说还有更多优化的方法,但我想让代码保持简单,只显示解决方案。
这可能足够了,但这取决于每个集合包含多少项
我认为一个非常简单的优化方法是通过删除一个已经找到的项目(因为在进一步的比较中不需要它)来防止如此多的项目比较。这样,集合可以随着每次循环迭代而收缩,使其工作得更快。但是,您可能需要创建要修改的集合的副本,以便访问其原始形式(请注意,分配此数组可能需要一些时间)。
另一种方法是使用已排序的集合并为它们实现某种搜索算法。这将使搜索过程本身更快,但需要一些额外的时间来对集合进行排序(也可以通过在已排序的表单中创建集合来实现排序,因此以后不需要排序)
可能还有其他的方法,但它可能取决于应用程序其他部分的详细信息以及您希望它使用的数据量。我可以为此使用lambda表达式吗..事实上我做不到。我可以为此使用lambda表达式吗..事实上我做不到。它可以工作,但这是最优化的方式吗,或者存在其他解决方案?我已经用一些关于可能的优化的信息更新了答案。它是有效的,但这是最优化的方式吗?或者存在其他解决方案?我已经用一些关于可能的优化的信息更新了答案。