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