(这个问题的标题不是最好的,但我不确定该怎么说!)
我正在处理包含值 list 的搜索表单。基本上,选中的项目意味着“在搜索中包含此类型”。像这样:
Search for item: __________
Search in:
[ ] Fresh Foods
[ ] Frozen Foods
[ ] Beverages
[ ] Deli Counter
我有一个对象来表示这个搜索:
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;}
}
我能想到做这个 atm 的唯一方法是这样的:
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;
}
这对我来说感觉像是一种代码味道,有什么更好的方法来处理它?</p>
最佳答案
PredicateBuilder predicate = PredicateBuilder.False<FoodItem>();
if (criteria.SearchFreshFoods)
{
predicate = predicate.Or(x => x.Type == 'Fresh Foods');
}
if (criteria.SearchFrozenFoods)
{
predicate = predicate.Or(x => x.Type == 'Frozen Foods'));
}
...
_DB.FoodItems.Where(predicate);
关于c# - 基于书籍构建 LINQ 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1143726/