如何将弃用的IMongoQuery转换为FilterDefinitionBuilder

时间:2017-03-23 18:10:21

标签: 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()方法。

更新:

这就是我目前正在做的事情,而且它是UGLY!如果有更好的方法,请告诉我。

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

1 个答案:

答案 0 :(得分:1)

我知道已经过去了很长时间,但是以防万一有人来这里寻求解决方案,这是 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));
}