我有三个下拉列表。它们中的每一个都具有值“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的任何好的想法?
答案 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();