Jeg fandt til sidst en løsning på dette problem, efter en masse gravearbejde fandt jeg ud af, at toLower()
metoder er ikke implementeret i mongoDb linq-udbyderen, så jeg var nødt til at skifte til at bruge MongoQuery
Jeg oprettede nogle udvidelsesmetoder til streng og liste, hvor den tager strengen eller listen som en kilde og konverterer den til et regulært bson-udtryk
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");
}
og så bruges de sådan her...
var colours = new List<string> { "Red", "blue", "white" };
var query = Query<myObject>.In(v => v.Colour, colours.ConvertToCaseInsensitiveRegexList());
this.Find(query).ToList();