LINQ to SQL объединяет две таблицы, чтобы выбрать родительскую таблицу дважды на основе двух разных столбцов из дочерней таблицы - PullRequest
1 голос
/ 23 августа 2010

Я хотел бы получить предложение как на C #, так и на VB.NET

У меня есть две таблицы Employees и CafeLogs.Некоторые сотрудники могут быть кассирами, а также покупателями в кафе.

Структуры таблиц:

  • Сотрудники: EmployeeId (PK), FirstName, LastName
  • CafeLogs: LogId(PK), CashierId, EmployeeId, Value, => CashierId и EmployeeId - это данные из столбца EmployeeId таблицы Empoyee

Отношение таблицы:

  • Сотрудники 1: N CafeLogs(CashierId (FK))

Данные таблицы сотрудников:

EmployeeId, FirstName, LastName

  • 1, Стив, Маркс
  • 2, Луи, Джон
  • 3, Скут, Джо
  • 4, Стивен, Джеральд
  • 5, Браун, Lexus

    Данные таблицы 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

Требуется результат : Я хочупоказывать как имя кассира, так и имя сотрудника, как это показано в одном запросе:

  • LogId, сотрудник, начисленный, значение
  • 1, Scoot Joe, Louis John, 9
  • 2, Стивен Джеральд, Скот Джо, 12
  • 3, Браун Лексус, Луи Джон, 8
  • 4, Стив Маркс, Скот Джо, 4
  • 5Стив Маркс, Скот Джо, 2
  • 6, Браун Лексус, Луи Джон, 9
  • 7, Стивен Джеральд, Лурс Джон, 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
    

1 Ответ

6 голосов
/ 23 августа 2010

Это должно быть сделано в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...