如何将未知查询运算符应用于 Firebase 客户端上的集合引用
How to apply unknown query operators to a collection reference on Firebase Client
我已经编写了一个 GetCollectionAsync
方法来查询 Firestore
上的集合。只要我想获得整个集合文档,它就可以正常工作。现在我想介绍查询运算符如:WhereEqualTo
、WhereIn
、WhereGreaterThanOrEqualTo
、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);
我已经编写了一个 GetCollectionAsync
方法来查询 Firestore
上的集合。只要我想获得整个集合文档,它就可以正常工作。现在我想介绍查询运算符如:WhereEqualTo
、WhereIn
、WhereGreaterThanOrEqualTo
、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);