(Le titre de cette question n'est pas le meilleur, mais je ne suis pas sûr comment d'autre mot, il!)Construire une requête LINQ basée sur bools
Je travaille sur un formulaire de recherche qui contient une liste de contrôle des valeurs. Fondamentalement, un élément coché signifie «inclure ce type dans la recherche». Quelque chose comme ceci:
Search for item: __________
Search in:
[ ] Fresh Foods
[ ] Frozen Foods
[ ] Beverages
[ ] Deli Counter
J'ai un objet pour représenter cette recherche:
class FoodSearchCriteria{
public string SearchString {get;set;}
public bool SearchFreshFoods {get;set;}
public bool SearchFrozenFoods {get;set;}
public bool SearchBeverages {get;set;}
public bool SearchDeliCounter {get;set;}
}
La seule façon que je peux penser à faire cette atmosphère est comme ceci:
public IList<FoodItem> FindFoodItems(FoodSearchCriteria criteria)
// in reality, this is a fuzzy search not an exact match
var matches = _DB.FoodItems.Where(x => x.FoodTitle == SearchString);
var inCategories = new List<FoodItem>();
if (criteria.SearchFreshFoods)
inCategories.Add(matches.Where(x => x.Type == 'Fresh Foods'));
if (criteria.SearchFrozenFoods)
inCategories.Add(matches.Where(x => x.Type == 'Frozen Foods'));
//etc etc
return inCategories;
}
Cela se sent comme une odeur de code pour moi, quelle serait une meilleure façon de l'aborder?
N'hésitez pas à élaborer sur ce refactoring que vous avez en tête :) – Kirschstein
Pas sûr de la main ... mais à tout le moins, il serait logique de mettre le code pour construire la liste * dans * cette classe. –