Я не уверен, что ответ на этот вопрос уже существует, так как я не могу понять, какой механизм в Linq предназначен для этой ситуации, или мне просто нужно сделать это вручную.
Допустим, у меня есть 2 таблицы:
------------Employees-------------
EmployeeID Name -other columns-
---------EmployeeSkills-----------
EmployeeID Skill -other columns-
Таким образом, каждый сотрудник может иметь 0 или более навыков.
Моя цель - нарисовать эту информацию в структуре данных в памяти, , используя один SQL-запрос
class StaticEmployee
{
int EmployeeID;
string Name;
List<string> Skills;
}
List<StaticEmployee> employees = (???).ToList();
Поскольку мои отношения с таблицами настроены, я могу просто обратиться к таблице сотрудников ( от сотрудника в db.Employees select employee ), однако, когда я получу доступ к свойству EmployeeSkills, он выполнит отдельный запрос для каждой записи сотрудника, поскольку эти данные не были возвращены при первом запросе.
В качестве альтернативы, и я хочу сделать то, что касается Sql, - выполнить запрос с левым соединением:
SELECT Employees.EmployeeID, Employees.Name, EmployeeSkills.Skill FROM Employees LEFT JOIN EmployeeSkills ON Employees.EmployeeID=EmployeeSkills.EmployeeID
Это даст мне мой список, но мне нужно будет вручную сопоставить его с моим списком, поскольку сотрудник с двумя навыками вернет 2 строки. Есть ли операция Linq, которая делает это? Гипотетический пример ниже
from employee in db.Employees
select new
{
EmployeeID = employee.EmployeeID,
Name = employee.Name,
Skills = new List(
from employeeSkill in employee.EmployeeSkills
select employeeSkill.skill
)
}