2010-08-23 105 views
1

父表我想獲得在C#的建議和VB.NET的LINQ to SQL連接兩個表來選擇兩次基於兩個不同的列從子表

我有兩個表的員工和CafeLogs。一些員工可以是收銀員,也可以是咖啡店的顧客。

表結構:

  • 僱員:僱員(PK),名字,姓氏
  • CafeLogs:LOGID(PK),CashierId,僱員,價值,=> CashierId和EMPLOYEEID是從塔EMPLOYEEID數據Empoyee表的

表關係:

  • 員工1:N CafeLogs(CAS hierId(FK))

僱員表數據:

EMPLOYEEID,名字,姓氏

  • 1,史蒂夫,商標
  • 2,路易,約翰
  • 3,快速移動, Joe
  • 4,Steven,Gerald
  • 5,Brown,Lexus

    CafeLogs表數據:

    LOGID,CashierId,僱員,價值

    • 1,2,3,9
    • 2,3,4,12
    • 3,2,5 ,8
    • 4,3,1,4
    • 5,3,1,2
    • 6,2,5,9
    • 7,2,4,1

通緝的結果:我想從一個查詢同時顯示出納名和員工的名字是這樣的:

  • LogId,Employee,Charged,Value
  • 1,Scoot Joe,Louis John,9
  • 2,史蒂芬傑拉德,快速移動喬,12
  • 3,布朗雷克薩斯,路易約翰,8
  • 4,史蒂夫標記,快速移動喬,4
  • 5,史蒂夫標記,快速移動喬,2
  • 6,布朗雷克薩斯,路易·約翰,9
  • 7,史蒂芬傑拉德,Lours約翰,1

    現在我知道如何只選擇LOGID,僱員的姓名,以及價值,而不是與出納的名字呢。

    Dim query = From log In db.CafeLogs _ 
          Join emp In db.Employees On emp.EmployeeId Equals log.EmployeeId _ 
          Select log.LogId, emp.FirsName, emp.LastName, log.Value 
    

回答

6

這應該做它在C#:

var query = from log in db.CafeLogs 
      join emp in db.Employees on log.EmployeeId equals emp.EmployeeId 
      join cas in db.Employees on log.CashierId equals cas.EmployeeId 
      select new 
      { 
       log.LogId, 
       Employee = emp.FirstName + " " + emp.LastName, 
       ChargedBy = cas.FirstName + " " + cas.LastName, 
       log.Value 
      }; 

和VB版本:

Dim query = From log In db.CafeLogs           _ 
      Join emp In db.Employees On log.EmployeeId Equals emp.EmployeeId _ 
      Join cas In db.Employees On log.CashierId Equals cas.EmployeeId _ 
      Select               _ 
       log.LogId,             _ 
       Employee = emp.FirstName & " " & emp.LastName,    _ 
       ChargedBy = cas.FirstName & " " & cas.LastName,    _ 
       log.Value 
+0

+1對於使用雙加入 – Narazana 2010-08-23 07:26:57