Je travaille sur une fonction de recherche simple. L'utilisateur entre un mot-clé request.Keyword
et s'attend à ce que la fonction de recherche "découvre" recherche, puis recherche dans cette collection avec le mot-clé. Les trois options pour le ce sont Name
, Number
ou Code
Fonction de recherche qui arrête de chercher plus loin après avoir trouvé un résultat
Ce que je suis arrivé avec est le suivant
// 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;
}
Le problème ici est que le produit du programme dans le if
-bloc après avoir trouvé un résultat de la recherche et continue à chercher dans les autres collections. Mais puisque nous avons déjà un résultat de recherche, ce serait inutile.
Le deuxième problème est que _items
reste inchangé quand aucun résultat de recherche n'a été trouvé. Mais en fait, l'utilisateur s'attend à ce qu'il soit vide dans ce cas.
Dans le code, ce que je veux réaliser, ressembleraient cette beauté:
// 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();
}
}
}
}
Comme vous pouvez le voir, l'imbrication est horrible (et ce code est simplifié). L'ajout de nouvelles collections va encore aggraver ...
Comment puis-je y parvenir avec du code (plus ou moins) propre?
Si la requête correspond 'Name' et' Number' vous voulez retourner les deux ou ..? –