如何使用MongoDB C#Driver v2构建查询?

时间:2016-01-22 19:22:54

标签: c# mongodb linq

我正在尝试以多个步骤构建查询,但它看起来像是流畅的界面(在IQueryable上定义的LINQ方法)在新版本的C#驱动程序中消失了。

    Function Reverse(ByVal input As String) As String
        Return String.Join(" ", input.Split(" ").Reverse())
    End Function

我想继续添加过滤器,但IFindFluent界面似乎不支持。根据参数,我甚至可能没有过滤器。如何在多个步骤中构建查询?

3 个答案:

答案 0 :(得分:1)

看起来这里有一个用于构建过滤器的类。在构造完整过滤器时,您应该调用一次Find方法。

var filterBuilder = new FilterDefinitionBuilder<WorkerSession>();
var filter = filterBuilder.Empty;

if (query.IsOngoing.HasValue)
{
    filter = filterBuilder.And(query.IsOngoing.Value
        ? new ExpressionFilterDefinition<WorkerSession>(session => session.CompletedOn == null)
        : new ExpressionFilterDefinition<WorkerSession>(session => session.CompletedOn != null));
}

var filtered = await workerSessions.Find(filter).ToListAsync();

答案 1 :(得分:0)

使用Slazure的Linq提供程序进行MongoDB查询过滤使您的方案更加简单。这是一个Slazure示例,其中为所有年龄小于22岁的客户查询虚构的“TestCustomers”集合并注册了新闻稿,最后将客户文档的电子邮件属性写入控制台:

using SysSurge.Slazure.AzureDocumentDB.Linq;
using SysSurge.Slazure.Core;
using SysSurge.Slazure.Core.Linq.QueryParser;

public void ShowYoungCustomerWithNewsletterEmails()
{
    // Get a reference to the collection
    dynamic storage = new QueryableStorage<DynDocument>("URL=https://contoso.documents.azure.com:443/;DBID=DDBExample;TOKEN=VZ+qKPAkl9TtX==");
    QueryableCollection<DynDocument> collection = storage.TestCustomers;

    // Build collection query
    var queryResult = collection.Where("SignedUpForNewsletter = true and Age < 22");

    foreach (var document in queryResult)
    {
        Console.WriteLine(document.email);
    }
}

答案 2 :(得分:0)

您可以使用IMongoCollection获取您的集合,然后使用AsQueryable

示例:

<?xml version="1.0" encoding="utf-8"?>
<SerializationClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <City value="Test"></City>
</SerializationClass>