C# LINQ ПРИСОЕДИНИТЬСЯ К ЛЯМБДА Добавить список столбцов из второй объединенной таблицы

#c# #linq #lambda

Вопрос:

У меня есть запрос linq, который объединяет 3 таблицы, в которых есть левое внешнее соединение во 2-й таблице. Я застрял на том, как добавить несколько столбцов из 2-й таблицы в мой выходной объект.

На данный момент у меня есть следующее

Я застрял для каждой записи пользователя, есть список, который может быть от 0 до многих записей. Как добавить список выбранных столбцов из таблицы office на основе идентификатора пользователя office, соответствующего идентификатору пользователя? например, мне нужно выбрать из таблицы office, officeSuiteNumber, имя офиса, дату начала работы офиса, дату окончания офиса?

Я предпочитаю добавить этот запрос вместо того, чтобы повторять цикл снова и добавлять список в каждую запись и увеличивать время обработки.

Спасибо за любую помощь.

 var result = this.dbContext.User
                    .GroupJoin(this.dbContext.Office,
                        user => user.userId,
                        office => office.userId,
                        (user, office) => new { user, office }
                    )
                    .SelectMany(
                        user_office_left => user_office_left.office.DefaultIfEmpty(),
                        (user_office_left, office) => new { user_office_left, office }
                    )
                    .Join(this.dbContext.Dept,
                        user_office => user_office.user_office_left.user.DivisionId,
                        dept=> division.DivisionId,
                        (emp_office, dept) => new { emp_office, dept}
                    )
                    .Select(joined => new MyViewModel
                    {

                        userId = joined.user_office.user_offce_left.user.userId,
                        LastNm = joined.user_office.user_offce_left.user.LastNm,
                        FirstNm = joined.user_office.user_offce_left.user.FirstNm,
                        Title = joined.user_office.user_offce_left.user.Title,
                        DivisionNm = joined.division.ShortDivisionNm,
                       
                        offices = ???? // how to add the list of office that could be 0 to many records 
 
                    }).ToList();
 

Комментарии:

1. Почему не используется синтаксис запроса?

2. @SvyatoslavDanyliv Какая разница, что бы это значило?

3. Что делать, если вы сделали AsEnumerable перед окончательным Select выводом данных на сторону клиента, а затем GroupBy отменили SelectMany , чем вы можете работать с группами… вы действительно хотите напрямую объединить группы, но это не может быть переведено в SQL — поэтому подумайте, каким должен быть вывод SQL, и используйте этот запрос, а затем преобразуйте его в объекты в LINQ.

4. @NetMage, удобочитаемость и рефакторинг. До сих пор не могу предсказать, какой SQL будет сгенерирован из этой путаницы прогнозов.

5. Вам действительно нужно присоединиться сюда? Покажите в вопросе вашу модель. Будет проще понять, как правильно сделать запрос, особенно если есть какие-либо свойства навигации.