MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Driver c# do MongoDB:Comparação sem distinção entre maiúsculas e minúsculas usando em ou contém em uma lista usando linq


Acabei encontrando uma solução para esse problema, depois de muito pesquisar descobri que o toLower() métodos não são implementados no provedor linq mongoDb, então eu tive que mudar para usar o MongoQuery

Eu criei alguns métodos de extensão para string e list onde ele pega a string ou lista como fonte e a converte em uma expressão regular bson
internal static List<BsonValue> ConvertToCaseInsensitiveRegexList(this IEnumerable<string> source)
{
    return source.Select(range => new BsonRegularExpression("/^" + range.Replace("+", @"\+") + "$/i")).Cast<BsonValue>().ToList();
}

internal static List<BsonValue> ConvertToEndsWithRegexList(this IEnumerable<string> source)
{
    return source.Select(range => new BsonRegularExpression("/" + range.Replace("+", @"\+") + "$/i")).Cast<BsonValue>().ToList();
}

internal static BsonRegularExpression ToCaseInsensitiveRegex(this string source)
{
    return new BsonRegularExpression("/^" + source.Replace("+", @"\+") + "$/i");
}

e depois são usados ​​assim...
var colours = new List<string> { "Red", "blue", "white" };
var query = Query<myObject>.In(v => v.Colour, colours.ConvertToCaseInsensitiveRegexList());
this.Find(query).ToList();