c# - 如何将已弃用的 IMongoQuery 转换为 FilterDefinitionBuilder

标签 c# mongodb dynamicquery

我有一个使用 MongoDB 驱动程序 v2.0 的 Visual Studio C# 项目,我正在尝试更新它以使用驱动程序 v2.3.0。

有一段代码基于各种搜索字段的存在构建了 IMongoQuery 条目列表,例如

var queryList = new List<IMongoQuery>();
if (!string.IsNullOrEmpty(searchField1))
  queryList.Add(Query.Matches(sKey1, searchField1));
...
if (!string.IsNullOrEmpty(searchFieldN))
  queryList.Add(Query.Matches(sKeyN, searchFieldN));

如何将其转换为新的 FilterDefinitionBuilder 语法?我在它的界面中没有看到类似的 Add() 方法。

更新:

这就是我目前正在做的事情,它是丑陋的!请让我知道是否有更好的方法来做到这一点。
var builder = Builders<BsonDocument>.Filter;
FilterDefinition<BsonDocument> filter = null;

// do this for each search field
if (!string.IsNullOrEmpty(searchField1))
{
  if (filter == null)
    filter = builder.Eq(sKey1, searchField1);
  else
    filter = filter & builder.Eq(sKey1, searchField1);
}

最佳答案

我知道很长时间过去了,但以防万一其他人来这里寻找解决方案,这里是 2.3.12 兼容方式

//create a filter definition builder
var fdefb = new FilterDefinitionBuilder<BsonDocument>(); //or FilterDefinitionBuilder<TModel>
//create a list of Filter Definitions
var queryList = new List<FilterDefinition<BsonDocument>>(); //or List<FilterDefinition<TModel>> 

// do this for each search field
if (!string.IsNullOrEmpty(searchField1))
{
   if (filter == null)
       filter = fdefb.Eq(sKey1, BsonValue.Create(searchField1));
   else
       filter &= fdefb.Eq(sKey1, BsonValue.Create(searchField1));
}

关于c# - 如何将已弃用的 IMongoQuery 转换为 FilterDefinitionBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42983816/

相关文章:

mongodb - 请求的内置库在 Dartium 上不可用

javascript - mongodb 用户配置文件添加输入时遇到问题

java - SpringMVC、MySQL动态查询

c# - 不支持复合类名。考虑搜索一个类名并过滤结果

java - 领域逻辑 - 读取模型

c# - List<string> 到 object[]

postgresql - 在 postgresql 的子查询中使用执行

c# - 用 C# 在 asp.net 中拆分字符串

MongoDB C# 连接/断开连接(官方驱动)

hibernate - 使用动态查询从 3 个表中获取数据