3 つのドロップダウン ボックスで選択した値に応じてフィルター処理する必要がある ID のリストがあります。2 つのドロップダウンで動作するようになりましたが、これが最適な方法ではないことがわかります。
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();
}
何らかの形式のラムダ式の方が適していると思いますが、私の人生では、それを機能させることができないようです。これは私がこれまでに持っているものです:
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 をフィルター処理する必要があります。