设计API为三个下拉列表的组合?

时间:2015-10-15 21:35:29

标签: asp.net asp.net-web-api linq-to-entities

我有三个下拉列表。它们中的每一个都具有值“ALL”。 HTML代码是这样的:

<select id="fruit">
    <option value="all" selected>All</option>
    <option value="apple">apple</option>
    <option value="lemon">lemon</option>
</select>

<select id="color">
    <option value="all" selected>All</option>
    <option value="yellow">Yellow</option>
    <option value="green">Green</option>
</select>



 <select id="flavor">
        <option value="all" selected>All</option>
        <option value="sweet">Sweet</option>
        <option value="acid">Acid</option>
</select>

我想根据用户选择这三个下拉列表来调用API。 我正在设计API并想知道参数应该是什么样子。

我正在使用ASP.NET API作为后端,所以API就是这样的:

public IHttpActionResult GetData(string fruitname, string colortype, string flavortype)
{
     var res = db.myclass.Where(z => z.FruitName.Equals(fruitname) 
                    && z.ColorType.Equals(colortype) 
                    && z.FlavorType.Equals(flavortype)).ToList();
     return Ok(res);
}

但是,一旦用户选择“全部”,我就必须绕过该选择 - 例如,如果用户选择水果下拉列表中的所有内容,我只需要在LINQ中有两个条件。

public IHttpActionResult GetData(string fruitname, string colortype, string flavortype)
{
     var res = db.myclass.Where(z => && z.ColorType.Equals(colortype) 
                    && z.FlavorType.Equals(flavortype)).ToList();
     return Ok(res);
}

由于这里有三个下拉列表,我不想一次又一次地重复自己。关于如何设计这些API的任何好的想法?

1 个答案:

答案 0 :(得分:1)

请勿将.ToList()作为“可查询”的一部分进行调用。定义 - 等到您根据条件有条件地决定了哪些WHERE过滤器。

类似的东西:

var query = db.myclass

if (fruitname != "All")
    query.Where(z => z.FruitName.Equals(fruitname));

if (colortype != "All")
    query.Where( z => z.ColorType.Equals(colortype));

if (flavortype != "All")
    query.Where( z => z.FlavorType.Equals(flavortype));

// query does not get executed until we call .ToList()
var res = query.ToList();