0

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 をフィルター処理する必要があります。

4

1 に答える 1

0

Grrr、なぜあなたは公開した後にこれらのことを解決するのですか!

// Check each item in search output against the values in the dropdown boxes
            foreach (var item in searchOutput)
            {
                nodesList.Add(item.Id);
            }

            List<int> filteredNodes = nodesList
                .Where(
                    x =>
                    ((ddlCategory.SelectedIndex == 0 || GetNodeProperty(Convert.ToInt32(x.ToString()), "categoryChooser", "categoryChooser").Contains(ddlCategory.SelectedValue)) && (ddlSport.SelectedIndex == 0 || GetNodeProperty(Convert.ToInt32(x.ToString()), "sportChooser", "sportChooser").Contains(ddlSport.SelectedValue))) && (ddlFileType.SelectedIndex == 0 || ContentType(Convert.ToInt32(x.ToString())) == ddlFileType.SelectedValue.ToLower()))
                .ToList();

            lvSearchResult.DataSource = filteredNodes;
            lvSearchResult.DataBind();
于 2013-03-14T16:18:21.607 に答える