在列表中搜索特定内容是否区分大小写

时间:2016-07-19 06:12:05

标签: c# .net

在我的应用程序中,我有一个搜索功能,我实现如下。

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"这样的东西时,它会显示结果。

它只搜索区分大小写,我想修改这个语句,它应该搜索并返回内容,无论它是否区分大小写,还应该为具有昏迷(,)冒号的内容(微笑| :),行情("",'')

如何修改语句以获得上述功能。

3 个答案:

答案 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
相关问题