0
我有一個需要篩選的ID列表,這取決於3個下拉框中選擇的值。我得到了它2個下拉菜單中工作,但可以看到,這是不完成它的最佳方式:使用3個下拉列表篩選IEnumerable
var nodesList = new List<int>();
// Check each item in search output against the values in the dropdown boxes
bool found = false;
foreach (var item in searchOutput) // searchOut is an IEnumerable
{
// This is where I need to add another dropdown box option but realise the code below is going to get even messier !!
if (GetNodeProperty(item.Id, "sportChooser", "sportChooser").Contains(ddlSport.SelectedValue))
{
if (ddlCategory.SelectedIndex == 0 || GetNodeProperty(item.Id, "categoryChooser", "categoryChooser").Contains(ddlCategory.SelectedValue))
{
found = true;
}
}
if (GetNodeProperty(item.Id, "categoryChooser", "categoryChooser").Contains(ddlCategory.SelectedValue))
{
if (ddlSport.SelectedIndex == 0 || GetNodeProperty(item.Id, "sportChooser", "sportChooser").Contains(ddlSport.SelectedValue))
{
found = true;
}
}
if (found)
{
nodesList.Add(item.Id);
found = false;
}
}
lvSearchResult.DataSource = nodesList;
lvSearchResult.DataBind();
}
我假定某種形式的Lambda表達式的會更適合,但對我的生活不能似乎得到它的工作。這是我到目前爲止有:
foreach (var item in searchOutput)
{
nodesList.Add(item.Id);
}
List<int> filteredNodes = nodesList
.Where(
x =>
GetNodeProperty(Convert.ToInt32(x.ToString()), "categoryChooser", "categoryChooser").Contains(ddlCategory.SelectedValue))
.Where(
x =>
GetNodeProperty(Convert.ToInt32(x.ToString()), "sportChooser", "sportChooser").Contains(ddlSport.SelectedValue))
.ToList();
注:我需要用3個下拉菜單的組合東西是否已經選擇或不過濾searchOutput。