2013-01-14 55 views
1

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

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进员工,我得到那些数据集的交叉连接。任何帮助将不胜感激。

我的主要目标是让数据库返回的数据暂时存储在某个地方,这样我可以稍后使用从数据库检索的其他数据来处理它。

employee1和employee2对雇员id(5)使用相同的查询,但employee1具有empID,empName和OrderDate,其中employee2具有empID,empName和shipAddress。现在我需要员工中的employee1和employee2中的empID,empName,OrderDate和ShipAddress。 empID在两者中都很常见,但我正在交叉连接。谢谢。

+0

显然会给交叉连接,因为雇员1和雇员2的所有记录的empId相同 – ethicallogics

回答

1

employee1employee2你还需要OrderId列,然后通过两个cos加入它们,你需要在两个表上获得一个相等的唯一键。

,并从你写的东西我觉得empID不是非此即彼表中唯一的,因为你可以有更多的订单同样empID

所以首先你需要在两个employee1employee2的唯一密钥,那么你可以加入上。

+0

雇员1和雇员2对雇员标识5使用相同的查询,除了雇员1有'empID,empName和OrderDate',其中'employee2具有empID,empName和shipAddress'。现在,我想'employee1'中的'empID,empName,OrderDate和ShipAddress'出现在'employee'中。 empID在两者中都很常见,但我正在交叉连接。谢谢。 – user1976486

0

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