Здравствуйте!
Имеется две таблицы - студенты и задолженность:
CREATE TABLE "Student" (
`ID` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
`Last_name` TEXT NOT NULL,
`First_name` TEXT NOT NULL,
`Patronymic` TEXT,
`Gender` INTEGER NOT NULL,
`id_group` INTEGER NOT NULL,
FOREIGN KEY(`id_group`) REFERENCES `Group`(`ID`) ON DELETE CASCADE
);
CREATE TABLE "Debts" (
`ID` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
`id_student` INTEGER NOT NULL,
`Date_last_payment` DateTime NOT NULL,
`Last_payment` INTEGER NOT NULL,
`Debt` INTEGER NOT NULL,
FOREIGN KEY(`id_student`) REFERENCES `Student`(`ID`) ON DELETE CASCADE
);
База данных в SQLite. Для неё сформирована модель Entity Framework (6й версии).
Как правильно составить EF запрос для выборки всех должников (то есть тех, у кого по последней оплате в таблице "Debts" имеется задолженность в поле `Debt`)? Так, чтоб не применялся APPLY JOIN (SQLite его не поддерживает).
SQL запрос для этой выборки у меня получился следующий (не стал перечислять все столбцы в SELECT):
SELECT Student.ID, Student.Last_name, MAX(Debts.Date_last_payment), Debts.Debt
FROM Student
JOIN Debts ON Student.ID=Debts.id_student
WHERE Debts.Debt <> 0
GROUP BY Student.ID;
Спасибо!
UPD Пробовал следующим запросом:
var query = _universityDB.Student
.Join(_universityDB.Debts, s => s.ID, d => d.id_student, (s, d) => new
{
Student = s,
Debts = d
})
.GroupBy(s => s.Student.ID)
.Select(s => new
{
Student = s.OrderByDescending(r => r.Debts.Date_last_payment).FirstOrDefault()
})
.Where(s => s.Student.Debts.Debt != 0);
Но тогда используется APPLY JOIN.