1
propertiers列表使用Azure的DocumentDb和.NET API,我有以下的方法,用于检索整个文档的列表的伟大工程:查询DocumentDB的使用LINQ的选择
public async Task<IEnumerable<T>> GetItemsAsync<T>(Expression<Func<T, bool>> predicate)
{
IDocumentQuery<T> query = _Client.CreateDocumentQuery<T>(
UriFactory.CreateDocumentCollectionUri(_DatabaseId, _Collection),
new FeedOptions { MaxItemCount = -1 })
.Where(predicate)
.AsDocumentQuery();
List<T> results = new List<T>();
while (query.HasMoreResults)
{
var item = await query.ExecuteNextAsync<T>();
results.AddRange(item);
}
return results;
}
现在,我不知道总是希望回到整个文档(尤其是考虑到DocumentDb RU定价模型),所以我想我应该能够添加。选择投影像这样:
public async Task<List<TResult>> GetItemsAsync<T, TResult>(Expression<Func<T, bool>> predicate, Expression<Func<T, TResult>> select)
{
IDocumentQuery<TResult> query = _Client.CreateDocumentQuery<T>(
UriFactory.CreateDocumentCollectionUri(_DatabaseId, _Collection),
new FeedOptions { MaxItemCount = -1 })
.Where(predicate)
.Select(select)
.AsDocumentQuery();
List<TResult> results = new List<TResult>();
while (query.HasMoreResults)
{
var item = await query.ExecuteNextAsync<TResult>();
results.AddRange(item);
}
return results;
}
用法:
var rez = await _docs.GetItemsAsync<ApolloAssetDoc, Guid?>(x => x.MyVal == 5, x => x.ID);
但第二种方法总是返回0结果。很明显,我正在吠叫错误的树。
任何想法什么正确的方式来返回一个选择多个属性的查询(例如"SELECT d.id, d.MyVal FROM Items d WHERE d.DocType=0"
)的动态对象的列表或只有一个属性被选中的简单列表(例如"SELECT d.id FROM Items d WHERE d.DocType=0"
)?
有趣!我确实定义了该属性,但是我在“ICosmosDocument”文档界面中定义了它。我没有意识到JsonProperty映射属性不能应用在界面中!可能适用于任何属性?感谢您的协助! –