我正在尝试以多个步骤构建查询,但它看起来像是流畅的界面(在IQueryable上定义的LINQ方法)在新版本的C#驱动程序中消失了。
Function Reverse(ByVal input As String) As String
Return String.Join(" ", input.Split(" ").Reverse())
End Function
我想继续添加过滤器,但IFindFluent界面似乎不支持。根据参数,我甚至可能没有过滤器。如何在多个步骤中构建查询?
答案 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>