MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Driver c# MongoDB:senza distinzione tra maiuscole e minuscole Confronta utilizzando in o contiene in un elenco utilizzando linq

Alla fine ho trovato una soluzione a questo problema, dopo molte ricerche ho scoperto che toLower() i metodi non sono implementati nel provider mongoDb linq, quindi ho dovuto passare all'utilizzo di MongoQuery

Ho creato alcuni metodi di estensione per string ed list in cui prende la stringa o l'elenco come sorgente e la converte in un'espressione regolare 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 poi si usano così...

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