#c# #linq #entity-framework-core
Вопрос:
Я пытаюсь сделать то же самое, что я сделал бы, используя SQL не в команде в ef core.
var studentsForTeam = await api.GetAllStudentsByTeamId(item.TeamId);
SessionId = item.Id;
TeamId = item.TeamId;
List<SessionStudent> studentsToRemove = await api.GetALLStudentsSessions();
// we want to remove the students that have alreeady arrived for a session.
var alreadyAttendend = studentsToRemove.Where(x=>x.isAbesent==false amp;amp;
x.isArrived==true).Select(x => x.StudentId );
var studentsnotArrvied = studentsToRemove.Where(w=>w.isAbesent==false amp;amp;
!alreadyAttendend.Contains(w.Id) ).ToList();
//I only want this to produce buttons for students that have not already checked in.
CheckInButtonsStudents(studentsForTeam);
Так, например, у меня есть
Студенческие Столы
Студенческий билет | Описание |
---|---|
117 | Доктор |
118 | Марта Джонс |
У меня есть Таблица Студенческих сессий
Идентификатор сезона | Студенческий билет | ИзАбсент | Прибыл |
---|---|---|---|
86 | 117 | Ложный | Правда |
87 | 118 | Правда | ложный |
Поэтому мне нужно, чтобы мой запрос, приведенный выше, содержал информацию о том, где в студенческой сессии существует идентификатор студента, где isAbsent false и isArrived true, чтобы исключить его из запроса «Студенты для команды».
Это моя функция регистрации
public async void CheckInButtonsStudents(ObservableCollection<Student> students)
{
string name = string.Empty;
checkinButtons.Children.Clear(); //just in case so you can call this code several times np..
foreach (var item in students)
{
var btn = new Button()
{
AutomationId = StudentId.ToString(),
BackgroundColor = Color.Blue,
TextColor = Color.White,
Text = item.FirstName " " item.Surname,
};
btn.BindingContext = item; // add this here
btn.Clicked = BtnStudents_Clicked;
checkinButtons.Children.Add(btn);
}
}
Ответ №1:
Поэтому мне нужно, чтобы мой запрос, приведенный выше, содержал информацию о том, где в студенческой сессии существует идентификатор студента, где isAbsent false и isArrived true, чтобы исключить его из запроса «Студенты для команды».
Если я вас правильно понимаю, вы хотите, чтобы все студенты, у studentsForTeam
которых есть студенческий билет, участвовали в студенческих сессиях, и студенческая сессия была зарегистрирована, но не была закрыта?
У нас уже есть эти студенческие сессии alreadyAttended
(isArrived amp;amp; !isAbsent). Таким образом, мы можем отфильтровать studentsforTeam
студентов с удостоверением alreadyAttended
личности .
var studentsForCheckIn = studentsForTeam
.Where(s => alreadyAttended.Contains(s.id))
.ToList();
CheckInButtonsStudents(studentsForCheckIn);
Затем я рекомендую вам немного упростить свой код:
// I think you have a typo here: use isAbsent instead of isAbesent
// Don't compare for == true or == false. !isAbsent is the same as isAbsent == false
var alreadyAttendend = studentsToRemove
.Where(x => !x.isAbsent amp;amp; x.isArrived)
.Select(x => x.StudentId);
// Here you select students that are not absent AND not in alreadyAttendend.
// That's the same as not absent and not arrived. If you write it like that, it's easier to read
var studentsNotArrvied = studentsToRemove
.Where(w => !w.isAbsent amp;amp; !w.isArrived).ToList();