sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB c# driver:Case Insensitive Porovnejte pomocí in nebo obsahuje v seznamu pomocí linq

Nakonec jsem našel řešení tohoto problému, po dlouhém hledání jsem zjistil, že toLower() metody nejsou implementovány v poskytovateli mongoDb linq, takže jsem musel přejít na používání MongoQuery

Vytvořil jsem několik metod rozšíření pro řetězec a seznam, kde bere řetězec nebo seznam jako zdroj a převádí jej na regulární výraz 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");
}

a pak se použijí takto...

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


  1. Odečtěte dílčí dokumenty od shromažďování v souhrnném potrubí

  2. Redis a dotazování na hodnoty

  3. zpracování změn jmenného prostoru během deserializace JSON String

  4. MongoDB:Jak zjistit n-tý nejvyšší plat z inkasa