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();