2013-01-14 82 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然後它會返回你想要的輸出。