0

Razor で DropDownList を作成し、デフォルトの空の項目の代わりに Linq の結果として 2 番目のパラメータを渡す方法はありますか?

重要なのは、アキュムレータ関数 (「関数」) を使用しているため、null を渡すことができないことです (その質問への回答として -複数の IF/CASE ステートメントの代替)

DropDownList が適していない場合は、代替案をいただければ幸いです。

コントローラ:

        public ActionResult Index(string searchFullName, string searchExtension, string searchProject)
        {
            var extensionList = new List<string>();
            var projectList = new List<string>();

            var projects = from n in unitofwork.DomainRepository.Get()
                           select n.Project;
            var extensions = from n in unitofwork.DomainRepository.Get()
                             select n.Extension;

            extensionList.AddRange(extensions.Distinct());
            projectList.AddRange(projects.Distinct());

            ViewBag.searchproject = new SelectList(projectList);
            ViewBag.searchExtension = new SelectList(extensionList);

            return View(unitofwork.DomainRepository.Filter(n => n.Name.Contains(searchFullName), n => n.Extension == searchExtension));
          }

「フィルター」方法:

public virtual IEnumerable<T> Filter(params Expression<Func<T, bool>>[] filters)
        {
            IQueryable<T> query = dbSet;

            return filters.Aggregate(query, (a, b) => a.Where(b));
        }

意見:

@using (Html.BeginForm()) {
    <p>
        Name: @Html.TextBox("searchFullName")
        Extension: @Html.DropDownList("searchExtension", "All") <- *would like to get one extension or all extensions*
        Projects: @Html.DropDownList("searchProject","All")
        <input type="submit"    value="Filters" />
    </p> }
4

1 に答える 1

0

Filter メソッドは、パラメータを必要とするデリゲートを使用して Linq クエリを構築します。

問題は、DDL で「すべて」の項目を選択した結果として、DDL が null を渡すことでした。そのため、Linq は null を取得していたため、 n => n.Name == null のような式は明らかに機能しませんでした。

null パラメータを処理するために、リンクされた質問からの CodeMaster のヒントを使用しました。

return View(unitofwork.DomainRepository.Filter(n => n.Name.Contains(searchFullName), n => (String.IsNullOrEmpty(searchExtension) || n.Extension == searchExtension), n => (String.IsNullOrEmpty(searchProject) || n.Project == searchProject)));
于 2013-11-04T14:35:21.983 に答える