一、場景描述:
開發的時候,有些查詢功能,往往查詢的條件是不確定的,用戶沒有填的不參與到查詢中去。
如圖1所示,用戶可能只要給根據名稱來查詢即可,有時候開始時間和結束時間並不需要填寫。
圖 1
二、解決方案
如圖2所示,傳統的解決方案往往是判斷下用戶輸入了什么字段,然后寫n個 if else 來判斷
圖 2
而本文利用三目運算符,減少了代碼量,給出了優雅的實現方式:
public List<Entity.Order> Search(OrderQuery orderQuery) { IQueryable<Entity.Order> orderList = shopDB.Orders.Where(p => p.Status == orderQuery.OrderStatus && p.CreatedTime > orderQuery.CreatedStartTime && p.CreatedTime < orderQuery.CreatedEndTime && string.IsNullOrEmpty(orderQuery.ShopId) ? true : p.ShopId == orderQuery.ShopId) && string.IsNullOrEmpty(orderQuery.Name) ? true : p.Name == orderQuery.Name; return orderList.ToList(); }
如代碼所示,條件寫法為:
&& string.IsNullOrEmpty(orderQuery.Name) ? true : p.Name == orderQuery.Name
如果傳入參數orderQuery.Name為空的話,直接為ture,跳過此條件。
三、寫在最后
如果大家有其他好的解決方案,歡迎交流!