Как я могу использовать Linq для включения List<myDto> в selectTableDto?

В настоящее время я использую Linq для объединения двух таблиц, mainTable и selectTable, они объединены в mainTable.ID = selectTable.mtID. Я пытаюсь включить третью таблицу, myTable, которая присоединена к selectTable.ID = myTable.selID. В myTable будет много записей для одного идентификатора из selectTable, поэтому я пытаюсь получить List<myTable>. Это то, что у меня есть до сих пор, что работает:

public async Task<List<mainTableDto>> listAll()
{
     var db = _repository.DbContext;
     var result = await ( from mt in db.mainTable
                    join sel in db.selectTable
                    on mt.ID equals sel.mtID
                    select new mainTableDto
                    {
                         ID = mt.ID,
                         createDate = mt.createDate,
                         selectTable = new selectTableDto
                         {
                               ID = sel.ID
                               name = sel.name
                          }
                    }                              
}).ToListAsync;

return result;

Я протестировал получение данных из selectTableDto с помощью List< myTableDto>, и это работает. Я немного застрял в том, как включить List<myTableDto> в этот вложенный вызов. Я пробовал:

join sel in db.selectTableInclude(x=>x.myTableDto)

Но когда я это делаю, я не получаю информацию из myTableDto и вместо этого просто получаю null (я поместил данные в БД, поэтому должно быть что-то) Я также пробовал:

                    join sel in db.selectTable
                    on mt.ID equals sel.mtID
                    join my in db.myTable
                    on sel.ID equals my.selID

                         selectTable = new selectTableDto
                         {
                               ID = sel.ID
                               name = sel.name
                               myTableDto = new List<myTableDto>
                               {
                                    ID = my.ID
                               }
                          }

Но когда я это делаю, он говорит: «ID не является членом myTableDTO».

Любые советы о том, что я делаю неправильно?

Я немного застрял в том, как включить список в этот вызов - я немного застрял в том, как это понять :) Что содержит ваш список? Как оно связано с другими сущностями?

Caius Jard 23.12.2020 20:42

@CaiusJard Я отредактировал его, так что, надеюсь, стало немного понятнее, как связаны selectTable и myTable, и по какой-то причине List<mytable> не отображался должным образом.

CoolGuyJones 23.12.2020 20:55

А, теперь я понял - уценка интерпретировала ваш <mytable> как тег html

Caius Jard 23.12.2020 20:59
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я полагаю, вам нужно присоединение к группе (синтаксис метода) или into (синтаксис запроса)

Это синтаксис запроса:

from mt in db.mainTable
join sel in db.selectTable
  on mt.ID equals sel.mtID
  into mainTableSels
select new mainTableDto
{
     ID = mt.ID,
     createDate = mt.createDate,
     selectTable = from mts in mainTableSels select new selectTableDto
     {
         ID = mts.ID
         name = mts.name
     }
} 

Хотя лично я предпочитаю гибридный синтаксис запроса/метода:

from mt in db.mainTable
join sel in db.selectTable
  on mt.ID equals sel.mtID
  into mainTableSels
select new mainTableDto
{
     ID = mt.ID,
     createDate = mt.createDate,
     selectTable =  mainTableSels.Select(mts => new selectTableDto
     {
         ID = mts.ID
         name = mts.name
     })
}  

    

Я не понимаю, к какому типу относится ваша собственность mainTableDto.selectTable; если это массив или список, вам понадобится ToArray/ToList. Если это IEnumerable, то он должен работать без

Я могу получить mainTable и selectTable для присоединения, и я получаю соответствующие данные. Проблема, с которой я сталкиваюсь, заключается в том, что после объединения этих двух таблиц, объединение myTable в selectTable. Если бы мне не нужно было иметь List<myTable>, это сработало бы, но я не могу понять, как получить этот List<myTable> там

CoolGuyJones 23.12.2020 21:21

Извините, я немного не понимаю, что такое myTable. Я предположил, что вы боретесь, потому что вы просто присоединялись к mainTable к selectTable и повторяли mainTable снова и снова с mainTable и selectTable, поэтому есть сопоставление 1: 1, когда вы хотели, чтобы все mainTable и каждый из них имел список из selectTable, которые относятся. Что такое myTable?

Caius Jard 23.12.2020 21:25

Блин, я тупой, я разобрался. По какой-то причине я не смотрел, как сделать отношения «один ко многим» в Linq. Я получил ответ от stackoverflow.com/questions/43683677/… Спасибо за помощь, хотя

CoolGuyJones 23.12.2020 21:35

Другие вопросы по теме