首页 > 解决方案 > 从查询 firebase 返回多个实例

问题描述

当前以 Xamarin 表单 (c#) 构建应用程序。该应用程序有一个 Firebase 后端。用户可以在应用程序内提交存储在 firebase 上的日志日志。

我正在处理的当前功能将根据用户 ID (uID) 从服务器检索所有日志实例,然后将它们显示到屏幕上。我目前的解决方案只返回最新的日志实例:

public async void getLastLogInstance(Guid uID)
    {

        //fetch last log user had information provided by user
        var getUser = (await firebaseClient
            .Child("UserLogs")
            .OnceAsync<UserLogs>()).Where(a => a.Object.UserID == uID).LastOrDefault();


        //if getUser equals null then the user has no log history
        if (getUser == null)
        {
            logDate.Text = "No recent logs found";

        }
        //valid logs found, return data, successful login
        else
        {
            var Content = getUser.Object as UserLogs;
            logDate.Text = Content.logTime;
            logData.Text = Content.logData;
            happinessRating.Text = Content.sliderValue;


        }


    }

我需要访问已返回的各个属性,例如 Content.logTime、Content.logData

我找到了一种返回多个实例的方法,但是我无法访问上面提到的各个属性。下面的代码取自另一个具有不同用途的模块,但是该模块的用途与上面的相似

 public async void DisplayContent(Guid idAsGuid)
    {
        try
        {
            /*getInstance will hold a list 
         * of result instances with the matching userID
         * */
            getResults = (await firebaseClient
            .Child("phq9Results")
            .OnceAsync<phq9Results>()).Where(a => a.Object.UserID == idAsGuid).Select(item => new phq9Results
            {
                UserID = item.Object.UserID,
                overallResult = item.Object.overallResult,
                submissionDate = item.Object.submissionDate

            }).ToList();

            //order list so most recently added result is positioned first
            var orderedResults = getResults.OrderByDescending(x => x.submissionDate).ToList();

            listOfResults.ItemsSource = orderedResults;

            

        }
        catch
        {
            return;
        }

非常感谢您提前提供的帮助!!

标签: c#firebasefirebase-realtime-databasexamarin.forms

解决方案


原来是一个相当简单的解决方案

通过执行此操作读取您尝试读取的数据的所有实例

            //fetch all logs connected to the users ID (uID)
        var getUser = (await firebaseClient
            .Child("UserLogs")
            .OnceAsync<UserLogs>()).Where(a => a.Object.UserID == uID).Select(item => new UserLogs
        {
            sliderValue = item.Object.sliderValue,

        }).ToList();

然后遍历getUser列表,通过item.x访问属性

            //loop for each item in object
        foreach (var item in getUser)
        {

           total = total + item.sliderValue

        }

推荐阅读