如何将未知查询运算符应用于 Firebase 客户端上的集合引用

How to apply unknown query operators to a collection reference on Firebase Client

我已经编写了一个 GetCollectionAsync 方法来查询 Firestore 上的集合。只要我想获得整个集合文档,它就可以正常工作。现在我想介绍查询运算符如:WhereEqualToWhereInWhereGreaterThanOrEqualTo、etc

我希望我的方法保持通用并公开一个参数,以便调用者可以传递一个或多个查询运算符。有办法实现吗?

    public async Task<IEnumerable<T>> GetCollectionAsync<T>(string path, /* query operators? */) 
    {
        var collectionRef = _firestoreDb.Collection(path);

        /* apply query operators to collection reference? */

        var snapshot = await collectionRef.GetSnapshotAsync();
        return snapshot.ConvertTo<T>();
    } 

根据@FaridShumbar 的要求,这是我的解决方法。

我做出的让步是将方法一分为二。所以调用者首先需要调用一个 GetCollectionReference 方法,对其应用过滤器,然后将其传递给 QueryCollectionAsync 以执行查询。

代码如下:

    public CollectionReference GetCollectionReference(string collectionPath)
    {
        return _firestoreDb.Collection(collectionPath);
    }

    public async Task<IEnumerable<T>> QueryCollectionAsync<T>(Query collectionReference)
    {
        var snapshot = await collectionReference.GetSnapshotAsync();
        return snapshot.ConvertTo<T>();
    }

    // Call example
    var collectionRef = _firebaseService.GetCollectionReference(path).WhereEqualTo("image", null);
    var articles = await _firebaseService.QueryCollectionAsync<MyArticle>(collectionRef);