如何使用LINQ将ID列表传入cosmos查询?

3htmauhk  于 2023-09-28  发布在  其他
关注(0)|答案(1)|浏览(97)

我们使用cosmos LINQ查询从cosmos中获取数据。但是我有一个要求,我需要传入一个id列表,它需要获取所有包含该列表的项目。由于某种原因,这段代码以前是可以工作的,但现在它只从那个列表中获取第一项

public Task<FeedResponse<Model>> Get(ConfigModel config, List<string> feedIds, Guid feedId, string name, int limit, string continuationToken)
        {
            Expression<Func<Model, bool>> queryFunc =
                m => 
                feedIds.Contains(m.FeedId.ToString());

            return GetByQuery(queryFunc, config, limit, continuationToken);
        }

上面的查询被传递到cosmos Linq sql函数,并按预期工作。我的问题是,基于LINQ中的ID列表,从cosmos中获取项目的正确格式是什么

nukf8bse

nukf8bse1#

基于LINQ中的ID列表从cosmos中获取项目的正确格式。

下面是我根据LINQ中的ID列表从cosmos中获取项目的格式:

  • 您要过滤的Id值在名为IdListList<string>中定义。
  • 使用提供的Cosmos DB端点URI主键创建CosmosClient类的示例。
  • 创建LINQ查询,根据Id字段过滤Cosmos DB容器中的文档。
  • 要筛选文档,请使用Where子句指定IdListId属性匹配的任何值。
  • 利用ToFeedIterator()函数为LINQ查询创建一个迭代器。它将允许在页面中检索查询结果。
  • 使用while循环异步执行查询,该循环检查是否有更多结果。在循环中使用ReadNextAsync可以得到下面的结果页面。
    我尝试的代码:
static async Task Main(string[] args)
{
    string cosmosEndpointUri = "*****";
    string cosmosPrimaryKey = "*****";
    string databaseName = "idListDb";
    string containerName = "testCont";
    
    List<string> idList = new List<string> {"1", "3"};

    CosmosClient cosmosClient = new CosmosClient(cosmosEndpointUri, cosmosPrimaryKey);

    var database = cosmosClient.GetDatabase(databaseName);

    var container = database.GetContainer(containerName);

    var query = container.GetItemLinqQueryable<YourDocumentType>()
        .Where(d => idList.Contains(d.id));
    
    var iterator = query.ToFeedIterator<YourDocumentType>();

    while (iterator.HasMoreResults)
    {
        var response = await iterator.ReadNextAsync();

        foreach (var document in response)
        {
            Console.WriteLine($"Id: {document.id}, FirstName: {document.FirstName}, LastName: {document.LastName}, Email: {document.Email}");
        }
    }
}

输出:

Id: 1, FirstName: John, LastName: Doe, Email: [email protected]
Id: 3, FirstName: Alice, LastName: Johnson, Email: [email protected]

相关问题