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 在两者中都很常见,但我得到了一个交叉连接。谢谢你。

4

2 回答 2

1

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

从你写的内容来看,我认为这empID在任何一张桌子上都不是独一无二的,因为你可以有更多相同的订单empID

所以首先你需要一个唯一的密钥employee1employee2然后你可以加入。

于 2013-01-14T06:14:56.770 回答
0

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

于 2016-09-09T05:10:15.327 回答