Linq to sql Linq到Sql,通过一个查询检索嵌套数据结构

Linq to sql Linq到Sql,通过一个查询检索嵌套数据结构,linq-to-sql,Linq To Sql,我不确定这个问题的答案是否已经存在,因为我不知道Linq中的什么机制适用于这种情况,或者我是否只需要手动执行 假设我有两张桌子: ------------Employees------------- EmployeeID Name -other columns- ---------EmployeeSkills----------- EmployeeID Skill -other columns- 因此,每位员工可以拥有0项或更多技能 我的目标是使用一个sql查询将这些信息

我不确定这个问题的答案是否已经存在,因为我不知道Linq中的什么机制适用于这种情况,或者我是否只需要手动执行

假设我有两张桌子:

------------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();
这将获得我的列表,但我需要手动将其整理到我的列表中,因为具有2种技能的员工将返回2行是否有Linq操作可以执行此操作?下面的假设示例


这看起来不错-甚至更好,LoadWith为我提供了一个我不知道存在的功能。向上投票。要完成此操作,是否有方法(在第二种方法中)只返回EmployeeSkills中的一些列(我只想要/需要Skill列,而不是该表中的每一列)无需担心,我只是尝试了明显的方法,并将“Skills=employee.EmployeeSkills”更改为“Skills=employee.EmployeeSkills.Select(s=>Skill)”。标记为已回答。作为旁注,需要将LoadOptions指定为datacontext中的第一件事,这有时会让人感到痛苦。正如你所注意到的,它加载了整个信息,这并不总是你所需要的。我使用linq查询大多数,只有在需要更新时才加载选项。
SELECT Employees.EmployeeID, Employees.Name, EmployeeSkills.Skill FROM Employees LEFT JOIN EmployeeSkills ON Employees.EmployeeID=EmployeeSkills.EmployeeID
from employee in db.Employees
select new 
{
   EmployeeID = employee.EmployeeID, 
   Name = employee.Name,
   Skills = new List(
                     from employeeSkill in employee.EmployeeSkills 
                     select employeeSkill.skill
                    )
}
var options = new DataLoadOptions();
options.LoadWith< Employees>(e => e.EmployeeSkills);
context.LoadOptions = options;
//retrieve employees, they will come loaded with EmployeeSkills
from employee in db.Employees
select new 
{
   EmployeeID = employee.EmployeeID, 
   Name = employee.Name,
   Skills = employee.EmployeeSkills
}