Filtragem sensível a maiúsculas e minúsculas OData na API da Web?
Por padrão, o ODataController realiza uma pesquisa que diferencia maiúsculas de minúsculas. Como estendemos esse comportamento para executar uma pesquisa que não diferencia maiúsculas de minúsculas.
public class NammaODataController : ODataController
{
[EnableQuery]
public IQueryable<FD> GetFD(ODataQueryOptions qo)
{
return _ctx.FDs.AsQueryAble();
//EF takes care to apply odata query operators internally
//after control passes from action
}
}
Eu me referieste SO Parece que podemos aproveitar a Expression Tree, mas em que ponto de extensibilidade?
Existe alguma maneira de interceptar a consulta e personalizar o EF / Web Api piplelie para conseguir isso?
Aqui está um exemplo: / FD? $ Filter = tolower (Pr_Name) eq tolower ('TAMARA') - isso deve retornar todas as pessoas com o nome 'Tamara' (sem distinção entre maiúsculas e minúsculas, pode ser 'TAMARA', 'tamara', 'Tamara', etc. Espero que isso ajude, para apresentar meu ponto de vista.
EDITAR:
Caso-senibilidade emODATA Web API queries
não tem nada a ver com o agrupamento do SQL. Este foi um problema com a estrutura Microsoft OData.
Com operador substringof
void Main()
{
var lower = _ctx.FD
.Where(sv => sv.Pr_Name.Contains("tamara"))
.Take(1)
.ToList();
Console.WriteLine("LOWER CASE AZURE SQL OUTPUT");
Console.WriteLine(lower);
Console.WriteLine("UPPER CASE AZURE SQL OUTPUT");
var upper = _ctx.FD
.Where(sv => sv.Pr_Name.Contains("TAMARA"))
.Take(1)
.ToList();
Console.WriteLine(upper);
}
Comeq
operador
void Main()
{
var lower = FD
.Where(sv => sv.Pr_Name == tamara A TOPOLESKI")
.Take(1)
.ToList();
Console.WriteLine("LOWER CASE AZURE SQL OUTPUT");
Console.WriteLine(lower);
Console.WriteLine("UPPER CASE AZURE SQL OUTPUT");
var upper = FD
.Where(sv => sv.Pr_Name == "TAMARA TOPOLESKI")
.Take(1)
.ToList();
Console.WriteLine(upper);
}