首页 > 解决方案 > 如何使用 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 的成员”。

关于我做错了什么有什么建议吗?

标签: c#entity-frameworklinq

解决方案


我相信你想要一个 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 那么它应该可以在没有的情况下工作


推荐阅读