if (product_search.Text.Trim() != "")
{
filteredProductsList = filteredProductsList
.FindAll(s => s.product.Contains(product_search.Text.Trim().ToUpper()));
}
我有上面的代码,如果产品包含搜索到的文本,则会向下过滤产品列表。但是,我希望此文本框在Product
或Barcode
上进行过滤。是否有运行FindAll()
但使用OR
语句的方法。那么请筛选出产品是否包含搜索到的文字或条形码?
答案 0 :(得分:2)
类似这样的东西:
// Search if product_search is not all whitespace string
if (!string.IsNullOrWhiteSpace(product_search.Text)) {
// let's extract a local variable (readability)
string toFind = product_search.Text.Trim();
// it seems you want case insensetive search: let's specify it clearly:
// StringComparison.CurrentCultureIgnoreCase
// trick: IndexOf(..., StringComparison.CurrentCultureIgnoreCase) >= 0 since
// we don't have appropriate Contains
// Finally, you want || - either product or barCode should contain toFind
filteredProductsList = filteredProductsList
.FindAll(item =>
item.product.IndexOf(toFind, StringComparison.CurrentCultureIgnoreCase) >= 0 ||
item.barCode.IndexOf(toFind, StringComparison.CurrentCultureIgnoreCase) >= 0);
}
答案 1 :(得分:0)
我不确定此filteredProductsList是哪种类型的列表,但我将假定它是字符串列表,因此使用linq可以执行类似的操作
filteredProductsList = filteredProductsList.Where(x => x.product.Contains(toFind) || x.barcode.Contains(toFind)).ToList();
或者,如果您只想要相反的选择,则可以这样做
filteredProductsList = filteredProductsList.Where(x => !(x.product.Contains(toFind) || x.barcode.Contains(toFind))).ToList();