Я создаю приложение для регистрации настроения, используя формы Xamarin для университетского проекта, но я ударился об стену, пытаясь вернуть данные, содержащиеся во вложенном дочернем узле. Пожалуйста, смотрите мою схему Firebase ниже:
BrainBreakApp
- MoodLog # 1
- уникальный идентификатор MoodLog, назначенный firebase
- Рейтинг настроения
- Примечание
- Местоположение
- Активность
- Уникальный идентификатор активности, назначенный firebase
- активность, зарегистрированная пользователь (например, Покупки )
- Уникальный идентификатор активности, назначенный firebase
- активность, зарегистрированная пользователем (например, Рабочая )
- MoodLog # 2
- MoodLog # 3 et c.
Я легко могу вернуть все данные в каждом журнале настроений, кроме данных в дочернем узле «Деятельности». Я поместил слова «покупки» и «работы» жирным шрифтом, потому что это данные, которые мне нужно вернуть.
В моей модели «MoodLog» я объявил атрибут «Деятельности» как список типа «Деятельность». «; которая представляет собой отдельную модель, просто содержащую атрибут «ActivityName». Поскольку мой текущий код стоит, мне нужно вернуть все действия для этого конкретного журнала в списке, который я могу назначить атрибуту «Деятельности» MoodLog.
Я пробовал несколько подходов, в том числе добавление оператора для возврата списка в назначении «Activity» и генерацию списка действий для каждого журнала эмоций отдельно и назначение возвращенного списка «Activity»; но явно не повезло. Проблема, с которой я постоянно сталкиваюсь при попытке создать отдельный список действий для этого журнала эмоций, - это возможность каждый раз получать доступ к ключу, сгенерированному с помощью firebase для этого конкретного журнала, а также возможность скорее возвращать тип List <> чем тип списка задач <>, который я не могу назначить атрибуту «Активность». Я признателен за то, что большая часть документации заявляет, чтобы сделать схему как можно более плоской, и если вы можете придумать более плоскую схему, которая будет служить той же цели, которая также будет фантастической c.
Я полный новичок в Firebase ie, поэтому любая помощь будет очень признательна! Я разместу свой текущий код ниже, и вы увидите, где мне нужно добавить список действий:
public async Task<List<EmotionLog>> GetAllLogsForPerson()
{
var allPersons = await GetAllLogs();
await Firebase
.Child(LogChildName)
.OnceAsync<EmotionLog>();
return allPersons.Where(a => a.UserId == personId).ToList();
}
public async Task<List<EmotionLog>> GetAllLogs()
{
return (await Firebase
.Child(LogChildName)
.OnceAsync<EmotionLog>()).Select(item => new EmotionLog
{
UserId = item.Object.UserId,
DateTime = item.Object.DateTime,
Note = item.Object.Note,
Location = item.Object.Location,
MoodRating = item.Object.MoodRating,
NoActivities = item.Object.NoActivities,
Activity =
{
// Need to add list of activities here
}
}).ToList();
}
РЕДАКТИРОВАТЬ:
Пожалуйста, смотрите код ниже используется для публикации данных журнала эмоций в базе данных Firebase. Сначала я добавляю все остальные данные журнала в метод «AddLog», а затем выполняю отдельные действия с помощью метода «AddActivity», который вызывается в методе «Add Log».
public async Task AddLog(string Id, string Note, string Location, DateTime DateTime, int MoodRating, List<string> ActivityList)
{
await Firebase
.Child(LogChildName)
.PostAsync(new EmotionLog() { UserId = Id, Note = Note, Location = Location, DateTime = DateTime, MoodRating = MoodRating});
await AddActivity(Id, ActivityList);
}
public async Task AddActivity(string Id, List<string> ActivityList)
{
var toAddUserActivities = (await Firebase
.Child(LogChildName)
.OnceAsync<EmotionLog>()).Last(a => a.Object.UserId == Id);
foreach (string item in ActivityList)
{
await Firebase
.Child(LogChildName)
.Child(toAddUserActivities.Key)
.Child(ActivityChildName)
.PostAsync(new Activity() { ActivityName = item });
}
}