2010-08-23 106 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