C#学习教程:MongoDB c#驱动程序:Case Insensitive使用linq在列表中使用或包含比较分享


MongoDB c#驱动程序:Case Insensitive使用linq在列表中使用或包含比较

我正在使用MongoDB C#驱动程序,我想在集合上做一个linq where子句,它将属性的低级版本与我在内存中的列表的小写版本进行比较。 像这样;

items = items.Where(i => listToCheck.Contains(i.Property.ToLower())); 

我也试过……

 items = items.Where(i => i.Property.ToLower().In(listToCheck)); 

我认为这实际上是正确的,应该可行,但可能尚未实施。

我收到一个错误,说“与ToLower()命令有关的’不支持的where子句’。 从我所看到的驱动程序目前无法实现这一点,因为它必须使用正则表达式进行“IN”查询,这是我无法看到的。

我想知道的是,如果有可能,如果可能,怎么样?

我最终找到了解决这个问题的方法,经过大量的挖掘后我发现toLower()方法没有在mongoDb linq提供程序中实现,所以我不得不改为使用MongoQuery

我为string和list创建了一些扩展方法,它将字符串或列表作为源并将其转换为bson正则表达式

 internal static List ConvertToCaseInsensitiveRegexList(this IEnumerable source) { return source.Select(range => new BsonRegularExpression("/^" + range.Replace("+", @"+") + "$/i")).Cast().ToList(); } internal static List ConvertToEndsWithRegexList(this IEnumerable source) { return source.Select(range => new BsonRegularExpression("/" + range.Replace("+", @"+") + "$/i")).Cast().ToList(); } internal static BsonRegularExpression ToCaseInsensitiveRegex(this string source) { return new BsonRegularExpression("/^" + source.Replace("+", @"+") + "$/i"); } 

然后就像这样使用它们……

上述就是C#学习教程:MongoDB c#驱动程序:Case Insensitive使用linq在列表中使用或包含比较分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—猴子技术宅(www.ssfiction.com)

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

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/1031704.html

发表评论

邮箱地址不会被公开。 必填项已用*标注