c# LINQ Запросы Лямбда выражения База данных

var debtors = (from users in context.Users
                          join tickets in context.Ticket on users.Id equals tickets.UserId
                          join book in context.Books on tickets.BookId equals book.Id
                          select users).ToList();

Как данный запрос переделать в лямбда выражение?


Ответы (1 шт):

Автор решения: Alexander Petrov

В вашем конкретном случае лучше оставить код как есть. Потому что два джойна в синтаксисе запросов выглядят просто и лаконично, а в синтаксисе методов код получается громоздким.

Тут приходится вручную прокидывать данные из первого джойна во второй с помощью анонимного типа.

var debtors = context.Users
    .Join(
        context.Tickets,
        user => user.Id,
        ticket => ticket.UserId,
        (user, ticket) => new
        {
            user,
            ticket
        })
    .Join(
        context.Books,
        temp => temp.ticket.BookId,
        book => book.Id,
        (temp, book) => temp.user)
    ;

Как известно, компилятор переписывает query syntax в method syntax на этапе компиляции кода. Существуют дополнения к Visual Studio, которые позволяют посмотреть итоговый результат. Поискать их можно на Marketplace.
Также весьма популярная утилита LinqPad предоставляет такую возможность.

→ Ссылка