Запрос на выборку данных из присоединяющейся таблицы - PullRequest
0 голосов
/ 17 мая 2019

У меня есть 4 таблицы:

Отдел

Id
-----------
1
2
3

Сотрудник

Id
----
a
b
c
d
e

Dep2Employee

DepId       EmployeeId
----------- ----------
1           a
1           b
2           c
2           d
3           e

EmployeeHistory

EmplId      ReportType Timestamp
----------- ---------- ----------
1           type1      12.12.12
1           type3      13.12.12
2           type2      14.12.12
3           type2      15.12.12

Возможно ли в одном выражении LINQ (EF Core) получить все отчеты type1 для всех сотрудников, работающих в Department с указанным Id, упорядоченным по метке времени?Что-то вроде GetAllReportsOfType1(string departmentId)

Интересно также, как будет выглядеть SQL-запрос.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 17 мая 2019

получить все отчеты типа 1 для всех сотрудников, работающих в Департаменте, с указанным идентификатором, упорядоченным по отметке времени

Предполагая, что вы настроили свои свойства навигации так, как я ожидал, вы, вероятно, захотите что-то вроде этого:

IQueryable<EmployeeHistory> GetAllReportsOfType1(string departmentId)
{
    return context.EmployeeHistory
        .Where(eh => eh.ReportType == "type1" && eh.Employee.Department.DepId == departmentId)
        .OrderBy(eh => eh.TimeStamp);
}

Сложно, без доступа к вашей модели и базе данных, чтобы я точно сказал вам, как будет выглядеть SQL, но это очень просто для вас: вы можете просто вызвать .ToString() в полученном IQueryable.

0 голосов
/ 17 мая 2019

SQL:

SELECT * FROM EmployeeHistory His WHERE EmplId in ( SELECT DE.EmployeeId FROM Dep2Employee DE WHERE DE.DepId = '1')
 AND His.ReportType = 'type1'

LINQ

 context.Dep2Employee.Where(a => a.DepId == "1")
                .SelectMany(b => b.EmplId.History.Where(a => a.ReportType == "type1")); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...