我正在一個簡單的搜索功能。用戶輸入關鍵字request.Keyword
,並期望搜索功能「找出」他在尋找什麼,然後使用關鍵字在該集合中進行搜索。三個選項爲什麼是Name
,Number
或Code
搜索功能,找到一個結果後,停止進一步尋找
我第一次來到了在以下
// Keyword filter
if (!string.IsNullOrWhiteSpace(request.Keyword))
{
var searchResults = _items.Where(x => x.Name.Contains(request.Keyword)).ToList();
if (searchResults.Any()) _items = searchResults;
searchResults= _items.Where(x => x.Number == request.Keyword).ToList();
if (searchResults.Any()) _items = searchResults;
searchResults= _items.Where(x => x.Code == request.Keyword).ToList();
if (searchResults.Any()) _items = searchResults;
}
這裏的問題是,該程序進入在if
- 塊找到後搜索結果並繼續在其他集合中進行搜索。但既然我們已經有了搜索結果,那就沒有必要了。
第二個問題是,當沒有找到搜索結果時,_items
保持不變。但事實上,在這種情況下,用戶期望它是空的。
在代碼中,我想達到的目標,應該是這樣的美:
// Keyword filter
if (!string.IsNullOrWhiteSpace(request.Keyword))
{
var searchResults = _items.Where(x => x.Name.Contains(request.Keyword)).ToList();
if (searchResults.Any())
{
_items = searchResults;
}
else
{
searchResults = _items.Where(x => x.Number == request.Keyword).ToList();
if (searchResults.Any())
{
_items = searchResults;
}
else
{
searchResults = _items.Where(x => x.Code == request.Keyword).ToList();
if (searchResults.Any())
{
_items = searchResults;
}
else
{
// Keyword was set, but no result was found.
_items.Clear();
}
}
}
}
正如你所看到的,嵌套是可怕的(這是簡化的代碼)。添加新的收藏將使它更糟......
我怎樣才能實現這個(或多或少)乾淨的代碼?
如果請求匹配'Name'和'Number',你想返回兩個或..? –