sql >> Base de Datos >  >> NoSQL >> MongoDB

Controlador MongoDB c#:Comparar mayúsculas y minúsculas usando in o contiene en una lista usando linq

Eventualmente encontré una solución a este problema, después de mucho investigar encontré que toLower() los métodos no están implementados en el proveedor linq de mongoDb, así que tuve que cambiar para usar MongoQuery

Creé algunos métodos de extensión para la cadena y la lista donde toma la cadena o la lista como fuente y la convierte en una expresión 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");
}

y luego se usan así...

var colours = new List<string> { "Red", "blue", "white" };
var query = Query<myObject>.In(v => v.Colour, colours.ConvertToCaseInsensitiveRegexList());
this.Find(query).ToList();