Как я могу получить эту сущность с вложенной информацией, используя EF и linq - PullRequest
0 голосов
/ 21 октября 2019

У меня есть 3 таблицы, которые связаны между собой. Employee, Relative, RelationTypeCatalog. Это отношение IX_Relatives_EmployeeId и IX_Relatives_RelationTypeCatalogId.

Model Как мне написать этот запрос с EF?

Я пытаюсь получить информацию от сотрудника, список родственников этого сотрудника и тип их отношений. До сих пор я пробовал эти варианты:

public async Task<Employee> GetEmployee(int id)
{
//(1) tried this
return await _context.Employees
            .Include(emp=> emp.Relatives.Select(rel=> 
             rel.RelationTypeCatalog))
            .FirstOrDefaultAsync(emp=>emp.Id == id);


}
//(2) also tried this...
public async Task<Employee> GetEmployee(int id)
{
var  test = (from e in _context.Employees
                        join re in _context.Relatives
                        on e.Id equals re.EmployeeId
                        join t in _context.RelationTypes
                        on re.RelationTypeCatalogId equals t.Id
                        where e.Id == id
                        select e).FirstOrDefaultAsync();

            return await test;
}

Вот так выглядит запрос с SQL

SELECT * 
from sagrha.employees 
inner join sagrha.relatives
on employees.Id = relatives.EmployeeId
inner join sagrha.relationtypes
on relatives.RelationTypeCatalogId= sagrha.relationtypes.Id;

Я ищу результат json, который будет выглядеть как

{
    "id": 1,
    "name": "Homero",
    "gender": "male",
    "relatives": [ 
    "Name":"Bart"
    "RelationType":"Child"
    ]
}

1 Ответ

1 голос
/ 21 октября 2019

Попробуйте использовать Включить, а затем Включить, как показано ниже:

return await _context.Employees
            .Include(emp=> emp.Relatives).ThenInclude(rel => rel.RelationTypeCatalog)
            .FirstOrDefaultAsync(emp=>emp.Id == id);
...