linq-to-sql - Linq to Sql,通过一次查询检索嵌套数据结构

标签 linq-to-sql

我不确定这个问题的答案是否已经存在,因为我无法弄清楚 Linq 中的机制适用于这种情况,或者我是否只需要手动执行。

假设我有 2 张 table :

------------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();

由于我的表关系已设置,我可以只 foreach 员工表(从 db.Employees 中的员工选择员工),但是当我访问 EmployeeSkills 属性时,它将执行单独的操作查询每条员工记录,因为第一次查询未返回该数据。

或者,就 Sql 而言,我想要做的是使用左连接运行查询:

SELECT Employees.EmployeeID, Employees.Name, EmployeeSkills.Skill FROM Employees LEFT JOIN EmployeeSkills ON Employees.EmployeeID=EmployeeSkills.EmployeeID

这将为我提供列表,但我需要手动将其整理到我的列表中,因为拥有 2 种技能的员工将返回 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
                    )
}

最佳答案

var options = new DataLoadOptions();
options.LoadWith< Employees>(e => e.EmployeeSkills);
context.LoadOptions = options;
//retrieve employees, they will come loaded with EmployeeSkills

如果您要使用 linq 查询版本,这也会加载它们一次:

from employee in db.Employees
select new 
{
   EmployeeID = employee.EmployeeID, 
   Name = employee.Name,
   Skills = employee.EmployeeSkills
}

关于linq-to-sql - Linq to Sql,通过一次查询检索嵌套数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/663579/

相关文章:

c# - LINQ to SQL 的内存泄漏

linq-to-sql - linq to entities vs fluent nhibernate vs linq to sql(帮助)

.net - Linq to SQL vs Entity Framework,微软支持

c# - 实例化空 IQueryable 以与 Linq to sql 一起使用

c# - 查询 Linq 加入多对多

linq-to-sql - Linq to SQL 和 Linq to Objects 查询是否相同?

c# - 将 DateTime 条目列表转换为自定义摘要列表

c# - Where condition equal true 和 Nullable 对象必须有一个值

c# - 需要建议 : Switching from Linq to SQL to Entity Framework

c# - 父子一对一关系同一张表