我有两个从数据库到对象的结果集,当我内部加入它们时,它返回交叉连接。以下是我的代码:
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)
在employee1
和employee2
中,您还需要OrderId
列,然后通过这两个表加入它们,您需要在两个表上获得相同的唯一键。
从你写的内容我认为empID
在两个表格中都不是唯一的,因为你可以为同一个empID
首先,您需要employee1
和employee2
上的唯一键,然后您就可以加入。
答案 1 :(得分:0)
从函数返回的结果在逻辑上是正确的,它不是交叉连接。 empID
在某些表中有一些重复的行,因此数据看起来像一个交叉连接。
使用distinct
然后它将返回您想要的输出。