我不确定这是否可以完成,但这是场景。

我想把这个sql变成linq:

SELECT * FROM Department d
INNER JOIN Employee e ON e.DepartmentID = d.DepartmentID

部门 - 员工是一对多的关系。

我创建了一个自定义对象,我想将结果填充到其中。
public class DepartmentSummary
{
    public Department Department { get; set; }
    public List<Employee> Employees {get; set;}
}

我想出的 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()
             };

我试过了,它不起作用。任何人都可以为我提供一些帮助吗?我想在部门和员工之间执行内部连接。对于结果集中的每个部门,我想创建一个 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()
             };

最佳答案

听起来您正在寻找解决延迟加载的问题?

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;
}

现在,如果您没有在 Department 和 Employees 之间定义关系(如果您设置了数据库关系,Linq2Sql 设计器将为您执行此操作),那么您应该考虑这样做。它使这一切变得更加容易。事实上,您甚至不需要您的广告系列摘要。

关于c# - Linq to Sql - 将 JOIN 结果填充到列表中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1580199/

10-12 12:49
查看更多