在我的应用程序中,我有一个搜索功能,我实现如下。
placelist = placelist.Where(i => i.category_name.Contains(postData)).Union(placelist.Where(i => i.category_address.Contains(postData))).Union(placelist.Where(i => i.category_tags.Contains(postData))).ToList();
eventlist = eventlist.Where(i => i.event_name.Contains(searchconte)).Union(eventlist.Where(i=>i.event_location.Contains(searchconte))).ToList();
indexlist = indexlist.Where(i => i.restaurant_location.Contains(searchtext)).Union(indexlist.Where(i => i.restaurant_name.Contains(searchtext))).Union(indexlist.Where(i=>i.cuisine_type.Contains(searchtext))).Union(indexlist.Where(i=>i.special_dishes.Contains(searchtext))).ToList();
当我输入postData作为" bamb"时,它什么也没有返回,但是当我输入像" Bamb"这样的东西时,它会显示结果。
它只搜索区分大小写,我想修改这个语句,它应该搜索并返回内容,无论它是否区分大小写,还应该为具有昏迷(,)冒号的内容(微笑| :),行情("",'')
如何修改语句以获得上述功能。
答案 0 :(得分:3)
您不需要所有这些联合,您可以使用OR逻辑运算符(NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"NL"];
[self.datePicker setLocale:locale];
):
||
var results = (from item in indexlist
where ContainsIgnoreCase(item.restaurant_location, searchText)
|| ContainsIgnoreCase(item.restaurant_name, searchText)
|| ContainsIgnoreCase(item.cuisine_type, searchText)
|| ContainsIgnoreCase(item.special_dishes, searchText)
select item).ToList();
private static bool ContainsIgnoreCase(string str, string search)
{
return str.IndexOf(search, StringComparison.InvariantCultureIgnoreCase) >= 0;
}
可用作String.IndexOf
+ Contains
的替代方式。
您可以通过创建扩展方法来扩展具有此功能的字符串类:
Ignore Case
<强>用法:强>
public static class MyExtensions
{
public static bool Contains(this string str, string value,
StringComparison comparisonType)
{
return str.IndexOf(value, comparisonType) >= 0;
}
}
答案 1 :(得分:0)
在每个字符串上调用.ToUpper()的最简单方法或.ToUpperInvariant()更适合我的情况。
答案 2 :(得分:0)
你可以像这样使用toUpper方法:
string str = "34bamb12";
str.Contains("Bamb", StringComparison.InvariantCultureIgnoreCase); // true