【问题标题】:LINQ to SQL join two tables to select parent table twice based on two different columns from child tableLINQ to SQL 连接两个表以根据子表中的两个不同列选择父表两次
【发布时间】:2011-04-02 11:44:28
【问题描述】:

我想在 C# 和 VB.NET 中获得建议

我有两张表Employees 和CafeLogs。一些员工可以是收银员,也可以是咖啡店的顾客。

表结构:

  • 员工:EmployeeId(PK) , FirstName, LastName
  • CafeLogs: LogId (PK), CashierId, EmployeeId, Value, => CashierId 和 EmployeeId 是来自员工表的 EmployeeId 列的数据

表关系:

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

员工表数据:

EmployeeId、FirstName、LastName

  • 1,史蒂夫,马克斯
  • 2,路易斯,约翰
  • 3,斯库特,乔
  • 4 , 杰拉德·史蒂文
  • 5,布朗,雷克萨斯

    CafeLogs 表数据:

    LogId、CashierId、EmployeeId、值

    • 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

想要的结果:我想从一个查询中同时显示出纳员姓名和员工姓名:

  • Lo​​gId、员工、收费人、值
  • 1 , Scoot Joe, Louis John, 9
  • 2,史蒂文·杰拉德,史考特·乔,12 岁
  • 3,布朗雷克萨斯,路易斯约翰,8
  • 4,史蒂夫·马克斯,斯科特·乔,4 岁
  • 5,史蒂夫·马克斯,斯科特·乔,2
  • 6,布朗雷克萨斯,路易斯约翰,9
  • 7,史蒂文杰拉德,卢尔斯约翰,1

    现在我知道如何只选择 LogId、Employee's name 和 Value,而不是 Cashier name。

     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
    

【问题讨论】:

    标签: c# vb.net linq linq-to-sql


    【解决方案1】:

    这应该在 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-20
      • 2018-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-20
      • 2019-12-18
      相关资源
      最近更新 更多