gpt4 book ai didi

c# - Linq to Sql - 将 JOIN 结果填充到列表中

转载 作者:太空狗 更新时间:2023-10-30 00:59:01 26 4
gpt4 key购买 nike

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

我想把这个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()
};

最佳答案

问题是您并不是真的采用一个 SQL 并试图从中创建一个 Linq 查询。

如果是,您会注意到您的 SQL 查询实际上并没有为每个部门生成一行,而是会为该部门的每个员工重复部门信息。

现在,乍一看会建议您使用 group-by 子句,因为这样可以将数据拆分为每个部门的单独分组,但 SQL 中的分组并不能真正为您提供键+全匹配-行类型的结果,而是它允许您进行聚合计算,例如“对于每个部门,我有多少员工”。

所以,为了做你想做的事,你基本上需要做一个正常的加入,这会给你每个员工,加上适当的部门信息(即每个员工将链接到他/她的部门),然后您需要自己构建其余的数据结构。

现在,话虽如此,如果您在与数据上下文相关的类中设置了适当的关系,那么每个部门都应该已经拥有某种包含该部门所有员工的属性,所以也许简单的查询只是“给我所有部门”,然后你可以为每个部门检索员工?

当然,这样做可能会为每个部门执行一个 SQL,但在这种情况下,您返回“将所有员工及其部门信息提供给我”,您必须构建代码来处理其余部分。

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com