sql >> Database >  >> NoSQL >> MongoDB

MongoDB c#-stuurprogramma:Hoofdletterongevoelig Vergelijk met in of bevat op een lijst met linq

Ik heb uiteindelijk een oplossing voor dit probleem gevonden, na veel speurwerk ontdekte ik dat de toLower() methoden zijn niet geïmplementeerd in de mongoDb linq-provider, dus ik moest overschakelen naar het gebruik van MongoQuery

Ik heb een aantal uitbreidingsmethoden gemaakt voor string en lijst waarbij de string of lijst als bron wordt gebruikt en deze wordt geconverteerd naar een reguliere expressie van 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");
}

en dan worden ze zo gebruikt...

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


  1. Redis failover met StackExchange / Sentinel van C#

  2. mongoose node.js, query met $lt en $gt werkt niet

  3. Voorwaardelijke $ som in MongoDB

  4. beperken om dubbele waarden op te slaan in mongodb