返回交叉连接而不是内连接

时间:2013-01-14 05:48:46

标签: c# .net linq

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

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在两者中都很常见,但我正在进行交叉连接。谢谢。

2 个答案:

答案 0 :(得分:1)

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

从你写的内容我认为empID在两个表格中都不是唯一的,因为你可以为同一个empID

订购更多订单

首先,您需要employee1employee2上的唯一键,然后您就可以加入。

答案 1 :(得分:0)

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