如何使用LINQ在集合中的每个字符串上调用ToLower()?

时间:2010-05-19 14:09:14

标签: c# linq

这是我的问题:

m_SelectedHandler = m_ListOfHandlers.SingleOrDefault(h => h.CountryNames.Contains(country.ToLower());

country是包含上述赋值的方法的字符串和参数。 CountryNames是一个字符串列表。如何在ToLower中的每个字符串上调用CountryNames,以便我获得此查询的有效匹配。有没有更好的方法来使用LINQ进行不区分大小写的比较?

4 个答案:

答案 0 :(得分:7)

是的,您可以为Contains方法指定IEqualityComparer<T>。例如,您可以使用StringComparer.CurrentCultureIgnoreCase

m_SelectedHandler = m_ListOfHandlers.SingleOrDefault(h => h.CountryNames.Contains(country, StringComparer.CurrentCultureIgnoreCase));

这也避免了通过调用ToLower创建的临时字符串。

答案 1 :(得分:0)

像这样:

m_ListOfHandlers.SingleOrDefault(h => h.CountryNames.Exists(cn => cn.ToLower() == country.ToLower()); 

答案 2 :(得分:0)

您可以像这样使用.Any

m_SelectedHandler = m_ListOfHandlers
    .SingleOrDefault(h => h.CountryNames
        .Any(countryName => countryName.ToLower() == country.ToLower()));

或将==替换成`.Equals,如:

countryName.Equals(country, StringComparison.OrdinalIgnoreCase)

进行不区分大小写的匹配

答案 3 :(得分:0)

你可以h.CountryNames.Any(x => StringComparer.CurrentCultureIgnoreCase.Equals(x, country)