accents - string compare c# case insensitive




LINQ contém maiúsculas e minúsculas (6)

A resposta aceita aqui não menciona o fato de que, se você tiver uma string nula ToLower (), lançará uma exceção. O caminho mais seguro seria fazer:

fi => (fi.DESCRIPTION ?? string.Empty).ToLower().Contains((description ?? string.Empty).ToLower())

Esse código faz distinção entre maiúsculas e minúsculas, como torná-lo insensível a maiúsculas e minúsculas?

public IQueryable<FACILITY_ITEM> GetFacilityItemRootByDescription(string description)
{
    return this.ObjectContext.FACILITY_ITEM.Where(fi => fi.DESCRIPTION.Contains(description));
}

IndexOf funciona melhor neste caso

return this
   .ObjectContext
   .FACILITY_ITEM
   .Where(fi => fi.DESCRIPTION.IndexOf(description, StringComparison.OrdinalIgnoreCase)>=0);

Supondo que estamos trabalhando com strings aqui, aqui está outra solução "elegante" usando IndexOf() .

public IQueryable<FACILITY_ITEM> GetFacilityItemRootByDescription(string description)
{
    return this.ObjectContext.FACILITY_ITEM
        .Where(fi => fi.DESCRIPTION
                       .IndexOf(description, StringComparison.OrdinalIgnoreCase) != -1);
}

Usando o C # 6.0 (que permite funções corporais de expressão e propagação nula), para LINQ to Objects, isso pode ser feito em uma única linha como essa (também verificando null):

public static bool ContainsInsensitive(this string str, string value) => str?.IndexOf(value, StringComparison.OrdinalIgnoreCase) >= 0;

Você pode usar string.Compare

    lst.Where(x => string.Compare(x,"valueToCompare",StringComparison.InvariantCultureIgnoreCase)==0);

se você quiser apenas verificar contém, em seguida, use "Qualquer"

  lst.Any(x => string.Compare(x,"valueToCompare",StringComparison.InvariantCultureIgnoreCase)==0)

public static bool Contains(this string input, string findMe, StringComparison comparisonType)
{
    return String.IsNullOrWhiteSpace(input) ? false : input.IndexOf(findMe, comparisonType) > -1;
}




linq