Dav*_*vid 5 .net c# linq-to-sql
我不确定这是否可以做到,但情况如下。
我想把这个sql变成linq:
SELECT * FROM Department d
INNER JOIN Employee e ON e.DepartmentID = d.DepartmentID
Run Code Online (Sandbox Code Playgroud)
部门-员工是一对多的关系。
我创建了一个自定义对象,我想将结果填充到其中。
public class DepartmentSummary
{
public Department Department { get; set; }
public List<Employee> Employees {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
我想出的 Linq 是
var result = from d in dba.Department
join e in dba.Employee d.DepartmentID equals e.DepartmentID into j1
select new DepartmentSummary
{
Department = d,
Employees = j1.ToList()
};
Run Code Online (Sandbox Code Playgroud)
我尝试了一下,但不起作用。有人能给我一些启发吗?我想在部门和员工之间执行内部联接。对于结果集中的每个部门,我想创建一个 DepartmentSummary 对象,该对象保存该部门以及属于该部门的员工列表。
Linq 是否为此提供了临时解决方案,或者我必须迭代结果集并手动创建 DepartmentSummary 列表?
谢谢,
编辑:看起来这对我有用
var result = from d in dba.Department
join e in dba.Employee d.DepartmentID equals e.DepartmentID into j1
where j1.Count() > 0
select new DepartmentSummary
{
Department = d,
Employees = j1.ToList()
};
Run Code Online (Sandbox Code Playgroud)
听起来您正在寻找解决延迟加载的方法?
DataLoadOptions dlo = new DataLoadOptions();
dlo.LoadWith<Department>(d => d.Employees);
using (var dba = new MyDataContext())
{
dba.LoadOptions = dlo;
var result = from d in dba.Department
select d;
}
Run Code Online (Sandbox Code Playgroud)
现在,如果您没有在部门和员工之间定义关系(如果您设置了数据库关系,Linq2Sql 设计器将为您执行此操作),那么您应该考虑这样做。它使一切变得更加容易。事实上,您甚至不需要活动摘要。