1

実行時にクエリを追加できるようにしたいと考えています。「古い」ドライバーを使用した私のソリューションは次のようなものでした。

    // A List does hold the queries
    List<IMongoQuery> QueryConditionList = new List<IMongoQuery>();

    void AddQuery(string sType, string sField, string sValue)
    {
        // I can add of course several Queries
        if (sType == "EQ")
            QueryConditionList.Add(Query.EQ(sField, sValue));
        else if (sType == "GT")
            QueryConditionList.Add(Query.GT(sField, sValue));
        else if (sType == "LT")
            QueryConditionList.Add(Query.LT(sField, sValue));
    }
    // At some point you can execute the queries
    void ExecuteQuery()
    {
        // Combine all to on "And" Query ("Or" would be possible as well)
        IMongoQuery query = Query.And(QueryConditionList);
        // Then I can get my cursor with a Find
        MongoCursor<BsonDocument> mc = MoCollection.Find(query);

        // Do anything with the cursor...
    }

これはかなりうまくいきました。しかし、新しい構文でそれを行う方法がわかりません。私のすべてのアプローチは、実際には動的ではありません。お気に入り:

var builder = Builders<BsonDocument>.Filter;
var filter = builder.Eq(Field1, Value1) & builder.Eq(Field2, Value2);

次のようなフィルターをさらに追加できると思いました

filter.add(builder.Eq(Field3, Value3)); // But of course I  can't
4

1 に答える 1

0

以下は、新しい API を使用してこれを行う方法です。

// A List does hold the queries
List<FilterDefition<BsonDocument>> QueryConditionList = new List<FilterDefition<BsonDocument>>();

void AddQuery(string sType, string sField, string sValue)
{
    // I can add of course several Queries
    if (sType == "EQ")
        QueryConditionList.Add(Builders<BsonDocument>.Filter.Eq(sField, sValue));
    else if (sType == "GT")
        QueryConditionList.Add(Builders<BsonDocument>.Filter.Gt(sField, sValue));
    else if (sType == "LT")
        QueryConditionList.Add(Builders<BsonDocument>.Filter.Lt(sField, sValue));
}

Task ExecuteQueryAsync()
{
    // The And method takes an IEnumerable<FilterDefinition<BsonDocument>>.
    var filter = Builders<BsonDocument>.Filter.And(QueryConditionList);
    var results = await MoCollection.Find(query).ToListAsync();
}
于 2015-09-10T12:34:47.533 に答える