В настоящее время я использую 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».
Любые советы о том, что я делаю неправильно?
@CaiusJard Я отредактировал его, так что, надеюсь, стало немного понятнее, как связаны selectTable и myTable, и по какой-то причине List<mytable> не отображался должным образом.
А, теперь я понял - уценка интерпретировала ваш <mytable>
как тег html
Я полагаю, вам нужно присоединение к группе (синтаксис метода) или 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> там
Извините, я немного не понимаю, что такое myTable. Я предположил, что вы боретесь, потому что вы просто присоединялись к mainTable к selectTable и повторяли mainTable снова и снова с mainTable и selectTable, поэтому есть сопоставление 1: 1, когда вы хотели, чтобы все mainTable и каждый из них имел список из selectTable, которые относятся. Что такое myTable
?
Блин, я тупой, я разобрался. По какой-то причине я не смотрел, как сделать отношения «один ко многим» в Linq. Я получил ответ от stackoverflow.com/questions/43683677/… Спасибо за помощь, хотя
Я немного застрял в том, как включить список в этот вызов - я немного застрял в том, как это понять :) Что содержит ваш список? Как оно связано с другими сущностями?