简体   繁体   English

LINQ to SQL连接两个表以基于子表中的两个不同列两次选择父表

[英]LINQ to SQL join two tables to select parent table twice based on two different columns from child table

I'd like to get suggestion in both C# and VB.NET 我想在C#和VB.NET中都得到建议

I have two tables Employees and CafeLogs. 我有两个表Employees和CafeLogs。 Some employees can be cashiers and also customers at the Cafe shop. 一些员工可以是收银员,也可以是Cafe商店的客户。

Table structures: 表结构:

  • Employees: EmployeeId(PK) , FirstName, LastName 员工:EmployeeId(PK),名字,姓氏
  • CafeLogs: LogId (PK), CashierId, EmployeeId, Value, => CashierId and EmployeeId are the data from column EmployeeId of Empoyee table CafeLogs:LogId(PK),CashierId,EmployeeId,Value,=> CashierId和EmployeeId是Empoyee表的EmployeeId列中的数据

Table relationship: 表关系:

  • Employees 1:N CafeLogs (CashierId (FK)) 员工1:N CafeLogs(CashierId(FK))

Employees table data: 员工表数据:

EmployeeId, FirstName, LastName EmployeeId,FirstName,LastName

  • 1 , Steve , Marks 1,史蒂夫·马克
  • 2 , Louis , John 2,路易斯,约翰
  • 3 , Scoot , Joe 3,酷航,乔
  • 4 , Steven, Gerald 4,史蒂芬·杰拉德
  • 5, Brown , Lexus 5,布朗,雷克萨斯

    CafeLogs table data: CafeLogs表数据:

    LogId, CashierId, EmployeeId, Value LogId,CashierId,EmployeeId,值

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

Wanted Result :I want to show both Cashier name and Employee name like this from one query: 想要的结果 :我想通过一个查询同时显示出纳员姓名和员工姓名:

  • LogId, Employee, Charged by, Value LogId,员工,按值计费
  • 1 , Scoot Joe, Louis John, 9 1,酷航乔,路易·约翰(9)
  • 2 , Steven Gerald, Scoot Joe, 12 2,史蒂芬·杰拉尔德,酷航乔,12
  • 3 , Brown Lexus, Louis John, 8 3,布朗·雷克萨斯,路易·约翰,8岁
  • 4 , Steve Marks, Scoot Joe, 4 4,史蒂夫·马克斯,酷飞乔,4
  • 5 , Steve Marks, Scoot Joe, 2 5,史蒂夫·马克(Steve Marks),酷飞乔(Scoot Joe),2
  • 6 , Brown Lexus, Louis John, 9 6,布朗·雷克萨斯,路易·约翰,9
  • 7 , Steven Gerald, Lours John, 1 7,史蒂芬·杰拉尔德,罗尔斯·约翰,1

    Right now I know how to select only LogId, Employee's name, and , Value, not with Cashier name yet. 现在,我知道如何仅选择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 

This should do it in C#: 这应该在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
            };

and the VB version: 和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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM