【问题标题】:Returning cross join instead of inner join返回交叉连接而不是内部连接
【发布时间】:2013-01-14 05:48:45
【问题描述】:

我有两个从数据库到对象的结果集,当我对它们进行内部连接时,它返回交叉连接。以下是我的代码:

var nw = new NorthwindEntities();
var employee1 = (from emp in nw.Employees
                 join ord in nw.Orders on emp.EmployeeID equals ord.EmployeeID
                 where emp.EmployeeID == 5
                 select new
                 {
                     empID = emp.EmployeeID,
                     empName = emp.FirstName,
                     ordDate = ord.OrderDate
                 }).ToList();

var employee2 = (from emp in nw.Employees
                 join ord in nw.Orders on emp.EmployeeID equals ord.EmployeeID
                 where emp.EmployeeID == 5
                 select new
                 {
                     empID = emp.EmployeeID,
                     empName = emp.FirstName,
                     shpAddress = ord.ShipAddress
                 }).ToList();

var employee = from e1 in employee1
               join e2 in employee2 on new { e1.empID } equals new { e2.empID }
               select new
               {
                   empID = e1.empID,
                   empName = e1.empName,
                   ordDate = e1.ordDate,
                   orAdd = e2.shpAddress
               };

gvAll.DataSource = employee.ToList();

现在,当我将employee1 和employee2 加入employee 时,我得到了这些数据集的交叉连接。任何帮助将不胜感激。

我的主要目标是将从数据库返回的数据临时存储在某个地方,以便稍后与从数据库检索到的其他数据一起使用。

employee1 和employee2 对员工ID (5) 使用相同的查询,但employee1 具有empID、empName 和OrderDate,而employee2 具有empID、empName 和shipAddress。现在我想从employee1 和employee2 中取出empID、empName、OrderDate 和ShipAddress。 empID 在两者中都很常见,但我得到了一个交叉连接。谢谢。

【问题讨论】:

  • 显然会给出交叉连接,因为empId在employee1和employee2的所有记录上都是相同的

标签: c# .net linq


【解决方案1】:

employee1employee2 中,您还需要OrderId 列,然后将它们连接起来,因为您需要在两个表上获得相同的唯一键。

从您写的内容来看,我认为empID 在这两个表中都不是唯一的,因为您可以为相同的empID 获得更多订单

所以首先你需要在employee1employee2 上都有一个唯一的密钥,然后你就可以加入了。

【讨论】:

  • employee1employee2 对员工 ID (5) 使用相同的查询,但 employee1 具有 empID, empName and OrderDate,其中 employee2 has empID, empName and shipAddress。现在我想要empID, empName, OrderDate and ShipAddress 中的employee1employee2 中的employee。 empID 在两者中都很常见,但我得到了一个交叉连接。谢谢。
【解决方案2】:

函数返回的结果逻辑正确,不是交叉连接。 empID 在某个表中有一些重复的行,所以数据看起来像一个交叉连接。 使用distinct 然后它将返回您想要的输出。

【讨论】:

    猜你喜欢
    • 2013-12-13
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 2020-04-27
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    • 2011-03-14
    相关资源
    最近更新 更多