c# - 如何使用 Linq 包含列表在 selectTableDto 中?
问题描述
我目前正在使用 Linq 将两个表连接在一起,mainTable 和 selectTable,它们在 mainTable.ID = selectTable.mtID 上连接。我试图包含第三个表 myTable,它在 selectTable.ID = myTable.selID 上加入。对于 selectTable 中的一个 ID,myTable 中会有很多记录,所以我试图获取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 的成员”。
关于我做错了什么有什么建议吗?
解决方案
我相信你想要一个 groupjoin(方法语法)或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 那么它应该可以在没有的情况下工作
推荐阅读
- python - catalan() 函数在这里如何工作?
- sql - SQL Query 查找一张表中行的差异
- php - 从 json 响应中设置在 HTML 中过滤的记录
- javascript - 为什么要安装前端库?
- android - 如何使用android通过语音命令(谷歌助手)在我的android应用程序中打开指定的活动
- html - W3验证流浪开始标签html
- amazon-redshift - CONVERT 函数从 SQL Server 到 REDSHIFT
- node.js - 将 log4js 记录器配置为仅将 INFO 记录到控制台并将所有内容记录到文件
- dart - dart中如何实现队列?
- javascript - Angular:如何转换数组中的值并在外部范围内获取值?