Jak radzić sobie z wieloma możliwymi wartościami, aby utworzyć zapytanie?

Buduję aplikację MVC, w której użytkownik będzie mógł korzystać z wielu filtrów, aby uzyskać dokładnie to, czego chce.

Oto przegląd tych filtrów oparty na metodzie kontrolera:

//
// GET: /Card/SearchIndex
public ActionResult SearchIndex(string objName, string objType, string objCostSymbol, string objCost, string powerSymbol,
                                        string powerValue, string ratingSymbol, string ratingValue, string ownerName, string objSet, 
                                        string objRarity, string addCostValue, int? objNumber,
                                        string addCostValue2, string addCostValue3, string addCostValue4, string addCostValue5, string addCostValue6,
                                        bool? blueColor, bool? redColor, bool? yellowColor, bool? purpleColor, bool? greyColor, bool? blackColor,
                                        bool? musicColor, bool? allColor)
        {
             // MORE CODE HERE...
        }

Chcę wiedzieć, w jaki sposób byłby najlepszy sposób radzenia sobie ze wszystkimi tymi filtrami i jak mogę uzyskać listę objInfo na podstawie podanych parametrów. Pamiętaj, że niektóre wartości mogą być puste. Wszystko, co do tej pory robiłem, to ładowanie „wszystkich” objInfo, które mogłem, a następnie sortowanie ich przez usunięcie niepotrzebnego elementu, który w moim rozumieniu „nie jest inteligentny”, ale jestem nowym użytkownikiem aplikacji MVC i ja ” staram się znaleźć lepszy sposób, aby to zrobić.

EDYTOWAĆ

Oto widok, który generuje dane:

@using System.Web.Mvc.Html
@model PagedList.IPagedList<MvcApp.Models.ObjInfo>

@{
    ViewBag.Title = "SearchIndex";
}

<h2>Objects Management</h2>

<p>
    @Html.ActionLink("Create New Obj", "Create")
    @using (Html.BeginForm()){
        <p>
            <label>
                Obj Colors : Check a box to search for a color.
            </label>
            All: @Html.CheckBox("allColor", true)<br/>
            Blue: @Html.CheckBox("blueColor", true)
            Red: @Html.CheckBox("redColor", true)
            Yellow: @Html.CheckBox("yellowColor", true) <br/>
            Purple: @Html.CheckBox("purpleColor", true)
            Grey: @Html.CheckBox("greyColor", true)
            Black: @Html.CheckBox("blackColor", true)
            Music: @Html.CheckBox("musicColor", true)
        </p>
        <p>
            <label>
                Obj Values: Select a value in the list below.
            </label>
            Obj Number: <input type="number" min="0" max="9999" name="cardNumber" value="int" style="width: 70px"/><br/>
            Additional Cost (contains): @Html.DropDownList("addCost", String.Empty) + @Html.DropDownList("addCost2", String.Empty)
            + @Html.DropDownList("addCost3", String.Empty) + @Html.DropDownList("addCost4", String.Empty)
            + @Html.DropDownList("addCost5", String.Empty) + @Html.DropDownList("addCost6", String.Empty)  <br/>
            Cost: @Html.DropDownList("objCostSymbol", "=") @Html.DropDownList("objCost", String.Empty)<br />
            Power: @Html.DropDownList("powerSymbol", "=") @Html.DropDownList("powerValue", String.Empty)<br/>
            Rating: @Html.DropDownList("ratingSymbol", "=") @Html.DropDownList("ratingValue", String.Empty)<br />
            <label>
                Obj Text: Write a name, part of a name, or a word.
            </label>
            Obj Name: @Html.TextBox("objName") <br/>
            Owner: @Html.TextBox("ownerName") <br />
            <label>
                Obj Categories: Select a category in the list below.
            </label>
            Type: @Html.DropDownList("objType","All") <br/>
            Obj Set: @Html.DropDownList("objSet", "All") <br/>
            Rarity: @Html.DropDownList("objRarity", "All")<br />
            <div class="float-right">
                <input type="submit" value="Filter" name="submitbutton">
            </div>
        </p>
    }
</p>
<span style="color:red; font-size: 1.7em; font-style: italic;">@ViewData["ErrorMessage"]</span>
<table>
    <tr>
        <th>Obj Name</th>
        <th>Obj Number</th>
        <th>Obj Color</th>
        <th>Additional Cost</th>
        <th>Cost</th>
        <th>Obj Type</th>
        <th>@Html.ActionLink("Power", "SearchIndex", new {sortOrder=ViewBag.PowerSortParm})</th>
        <th>@Html.ActionLink("Rating", "SearchIndex", new {sortOrder=ViewBag.RatingSortParm})</th>
        <th>Rarity</th>
        <th>Obj Set Name</th>
        <th>Owner Name</th>
        <th></th>
    </tr>

    @foreach (var item in Model) {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.m_ObjName)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.m_ObjNumber)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.m_ObjColor)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.m_ObjAddCost)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.m_ObjCost)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.m_ObjType)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.m_ObjPower)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.m_ObjRating)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.m_ObjRarity)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.m_ObjSet.m_ObjSetName)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.m_ObjOwner)
            </td>
            <td>
                @Html.ActionLink("Edit", "Edit", new { id=item.m_ObjID }) |
                @Html.ActionLink("Details", "Details", new { id=item.m_ObjID }) |
                @Html.ActionLink("Delete", "Delete", new { id=item.m_ObjID })
            </td>
        </tr>
    }
</table>

<div>
    Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber)
    of @Model.PageCount

    @if (Model.HasPreviousPage)
    {
        @Html.ActionLink("<<", "SearchIndex", new {page = 1, sortOrder = ViewBag.CurrentSort})
        @Html.Raw(" ")
        @Html.ActionLink("< Prev", "SearchIndex", new {page = Model.PageNumber - 1, sortOrder = ViewBag.CurrentSort})
    }
    else
    {
        @:<<
        @Html.Raw(" ");
        @:< Prev
    }

    @if (Model.HasNextPage)
    {
        @Html.ActionLink("Next >", "SearchIndex", new {page = Model.PageNumber + 1, sortOrder = ViewBag.CurrentSort})
        @Html.Raw(" ")
        @Html.ActionLink(">>", "SearchIndex", new {page = Model.PageCount, sortOrder = ViewBag.CurrentSort})
    }
    else
    {
        @:Next >
        @Html.Raw(" ")
        @:>>
    }
</div>

Każda rada pomoże mi wykonać lepszą pracę, dziękuję.

questionAnswers(3)

yourAnswerToTheQuestion