phoenixbk
@phoenixbk

Как правильно сформировать запрос для Entity Framework для двух таблиц?

Здравствуйте!
Имеется две таблицы - студенты и задолженность:
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.
  • Вопрос задан
  • 444 просмотра
Пригласить эксперта
Ответы на вопрос 1
k1lex
@k1lex
Программист торг. сети. C# (WPF, WinForms), T-SQL
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы