无法从 Azure Cosmos DB 获取数据

Unable to fetch data from Azure Cosmos DB

我有以下型号 class CallbackResponse.cs :

public class CallbackResponse
    {
        public Callback Data { get; set; }
    }

    public class Callback
    {
        public IEnumerable<ReviewInProgressActivityFeed> ActivitiesFeed { get; set; }
    }

    public class ReviewInProgressActivityFeed
    {
        public ReviewInProgressStatus ReviewerSession { get; set; }
    }
    
    public class ReviewInProgressStatus
    {

        public Guid ReviewActivityId { get; set; }


        public string ReviewerName { get; set; }


        public string ReviewComments { get; set; }


        public DateTime ActivityDateTime { get; set; }
    }

示例负载:

{
"data": 
{
"activitiesFeed": [
                      {
"reviewerSession": 
{
"reviewActivityId": "dd9937c3-7c01-4a4a-bc8d-05ef37b07ee5",
"ReviewerName": "Verification Team",
"reviewComments": "upload business verification document for further verification.",
"activityDateTime": "2021-03-31T18:34:26.5978962Z"
},
                       },
                       {
"reviewerSession": 
{
"reviewActivityId": "dd9937c3-7c01-4a4a-bc8d-05ef37b07ee5",
"ReviewerName": "Other Team",
"reviewComments": "other documents required for verification.",
"activityDateTime": "2021-03-31T19:34:26.5978962Z"
},
                       }
                   ]
}
}

我正在尝试通过 CallbackResponse 模型从数据库中获取数据 class。请在下面找到代码。

public async Task<CallbackResponse> CallbackActivityFeedAsync(Guid Id)
        {
            CallbackResponse containerItems = new CallbackResponse();

            IQueryable<HumanReviewRequest> query = cosmosReviewRequestContainer.GetItemLinqQueryable<HumanReviewRequest>(true);

            query = query.Where(x => x.id == Id);

            FeedIterator<HumanReviewRequest> feedIterator = query.ToFeedIterator();
            while (feedIterator.HasMoreResults)
            {
                FeedResponse<HumanReviewRequest> r = await feedIterator.ReadNextAsync().ConfigureAwait(false);
                foreach (HumanReviewRequest requestModel in r)
                {
                    containerItems = new CallbackResponse
                    {
                        Data = new Callback
                        {                            
                            ActivitiesFeed = new List<ReviewInProgressActivityFeed>
                            {
                                new ReviewInProgressActivityFeed
                                {
                                    ReviewerSession = new ReviewInProgressStatus
                                    {      
                                        ReviewActivityId = requestModel.ReviewActivities.Select(x => x.ReviewerSession.ReviewActivityId).LastOrDefault(),
                                        ActivityDateTime = requestModel.ReviewActivities.Select(x => x.ReviewerSession.ActivityDateTime).LastOrDefault(),                                     
                                        ReviewComments = requestModel.ReviewActivities.Select(x => x.ReviewerSession.ReviewerComments).LastOrDefault(),
                                        ReviewerName = requestModel.ReviewActivities.Select(x => x.ReviewerSession.ReviewerName).LastOrDefault()
                                    }
                                }
                            }
                        }
                    };
                }
            }
            return containerItems;
        }

这里的问题是我无法获取数据库中 activitiesFeed 数组中存在的所有记录。相反,我只能获取该数组中的最后一条记录(我使用的是 Azure Cosmos DB)。请帮助我。

HumanReviewRequest.cs(即DBClass)供参考:

public class HumanReviewRequest
   {
       public Guid Id { get; set; }
       
       public IEnumerable<ReviewActivity> ReviewActivities { get; set; }
   
   public class ReviewActivity
   {
       public ReviewerSession ReviewerSession { get; set; }

       public string UserComments { get; set; }
   }

   public class ReviewerSession
   {
       public Guid ReviewActivityId { get; set; }
   
       public Guid ReviewerUserId { get; set; }

       public DateTime ActivityDateTime { get; set; }

       public string ReviewerComments { get; set; }
   }

这是因为您正在创建一个 new List<ReviewInProgressActivityFeed>、一个 new ReviewInProgressActivityFeed 并且每次迭代只读取 activitiesFeed 中的最后一个元素:

ReviewerSession = new ReviewInProgressStatus
                                    {      
                                        ReviewActivityId = requestModel.ReviewActivities.Select(x => x.ReviewerSession.ReviewActivityId).LastOrDefault(),
                                        ActivityDateTime = requestModel.ReviewActivities.Select(x => x.ReviewerSession.ActivityDateTime).LastOrDefault(),                                     
                                        ReviewComments = requestModel.ReviewActivities.Select(x => x.ReviewerSession.ReviewerComments).LastOrDefault(),
                                        ReviewerName = requestModel.ReviewActivities.Select(x => x.ReviewerSession.ReviewerName).LastOrDefault()
                                    }

尝试用下面的代码代替上面的代码:

 public async Task<CallbackResponse> CallbackActivityFeedAsync(Guid Id)
        {
            CallbackResponse containerItems = new CallbackResponse();
            containerItems.Data = new Callback();
            containerItems.Data.ActivitiesFeed = new List<ReviewInProgressActivityFeed>();

            IQueryable<HumanReviewRequest> query = cosmosReviewRequestContainer.GetItemLinqQueryable<HumanReviewRequest>(true);

            query = query.Where(x => x.id == Id);

            FeedIterator<HumanReviewRequest> feedIterator = query.ToFeedIterator();
            while (feedIterator.HasMoreResults)
            {
                FeedResponse<HumanReviewRequest> r = await feedIterator.ReadNextAsync().ConfigureAwait(false);
                if (r != null || r.ReviewActivities != null)
                {
                    foreach (HumanReviewRequest requestModel in r.ReviewActivities)
                    {
                        containerItems.Data.ActivitiesFeed.Add(
                                    new ReviewInProgressActivityFeed
                                    {
                                        ReviewerSession = new ReviewInProgressStatus
                                        {
                                            ReviewActivityId = requestModel.ReviewerSession.ReviewActivityId,
                                            ActivityDateTime = requestModel.ReviewerSession.ActivityDateTime,
                                            ReviewComments = requestModel.ReviewerSession.ReviewerComments,
                                            ReviewerName = requestModel.ReviewerSession.ReviewerName
                                        }
                                    });
                    }
                }
            }
        };
    }
}
return containerItems;
        }