MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Pilote MongoDB c# :comparaison insensible à la casse à l'aide de in ou contains sur une liste à l'aide de linq

J'ai finalement trouvé une solution à ce problème, après de nombreuses recherches, j'ai trouvé que le toLower() les méthodes ne sont pas implémentées dans le fournisseur mongoDb linq, j'ai donc dû passer à l'utilisation de MongoQuery

J'ai créé des méthodes d'extension pour la chaîne et la liste où il prend la chaîne ou la liste comme source et la convertit en une expression régulière 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");
}

et puis ils sont utilisés comme ça...

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