2015-10-15 18 views
0

我有三個下拉列表。它們中的每一個都具有「全部」的值。 HTML代碼是這樣的:爲三種下拉列表的組合設計API?

<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> 

我想打電話給基於這三個dropdownlists的用戶選擇的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); 
} 

然而,一旦用戶選擇「ALL」,我必須繞過的選擇 - 比如,如果用戶選擇所有的水果下拉菜單,我只需要在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

不要調用.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(); 
+0

感謝您的答覆。然而,我把代碼放在那裏,然後選擇檸檬,黃色和甜點,我仍然從db.myclass獲取所有數據.... – catlovespurple