Cuối cùng tôi đã tìm ra giải pháp cho vấn đề này, sau rất nhiều lần tìm hiểu, tôi thấy rằng toLower()
các phương thức không được triển khai trong nhà cung cấp linq mongoDb vì vậy tôi phải chuyển sang sử dụng MongoQuery
Tôi đã tạo một số phương thức mở rộng cho chuỗi và danh sách trong đó nó lấy chuỗi hoặc danh sách làm nguồn và chuyển đổi nó thành biểu thức chính quy 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");
}
và sau đó chúng được sử dụng như thế này ...
var colours = new List<string> { "Red", "blue", "white" };
var query = Query<myObject>.In(v => v.Colour, colours.ConvertToCaseInsensitiveRegexList());
this.Find(query).ToList();