MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB-c#-Treiber:Groß-/Kleinschreibung wird nicht berücksichtigt Vergleichen Sie mit in oder contains auf einer Liste mit linq

Ich habe schließlich eine Lösung für dieses Problem gefunden, nach langem Suchen fand ich heraus, dass toLower() Methoden sind nicht im linq-Anbieter von mongoDb implementiert, daher musste ich zur Verwendung von MongoQuery wechseln

Ich habe einige Erweiterungsmethoden für Zeichenfolgen und Listen erstellt, bei denen die Zeichenfolge oder Liste als Quelle verwendet und in einen regulären bson-Ausdruck konvertiert wird

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");
}

und dann werden sie so verwendet...

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