通过对SQL数据库的一次调用检索两个级别的数据
本文关键字:检索 两个 数据 调用 一次 数据库 SQL | 更新日期: 2023-09-27 18:26:22
我需要从数据库中检索一组记录,并将它们附加到List<FirstRecord>
变量中。但是,每个FirstRecord
对象都有一组SecondRecord
对象,所以我还需要定义一个像List<SecondRecord>
这样的变量。
目前,为了做到这一点,我首先调用DB来构建List<FirstRecord>
变量,然后对于每个FirstRecord
,我再调用DB来检索数据,并为每个FirstRecord
对象构建List<SecondRecord>
变量。
当然,这是一个非常薄弱的设计。我正在使用SQL Helper。是否可以通过对数据库的一次调用来处理此任务?或者,你认为实体框架可以处理这个问题,我应该更好地切换到实体框架吗?
更新为示例
表1UserId |用户名1422|erkaner
表2PostId | Text | UserId1|消息1|14221|消息2|14221 |消息3 | 1422
public class UserInfo
{
public Guid UserId{set ; get ;}
public string Username {set ; get ;}
public List<PostInfo> Posts {set ; get ;}
}
public class PostInfo
{
public Guid PostId{set ; get ;}
public string PostText{set ; get ;}
}
然后,我应该使用内部联接来合并TABLE1和TABLE2,并一次检索所有数据。然后,通过适当的编码,我应该创建UserInfo对象和里面的List obhect。这是正确的吗?
谢谢!
不太确定这是否合适,但为什么不让SecondRecord
像一样成为FirstRecord
的实例成员
public class SecondRecord
{
//properties
//Methods
}
public class FirstRecord
{
public SecondRecord secondRecord;
}
然后,您可以从数据库中获得所有FirstRecord
和secondrecord
,并相应地进行填充,这将避免对数据库进行双重调用。
根据您编辑的帖子;是的,这就是应该做的。由于表之间已经存在关系,因此可以在userid
列上执行leftjoin
(因为每个用户可能/可能不一定都有帖子)并获取所有记录,然后相应地填充userinfo
和postinfo
。
select t1.userid,
t1.username,
t2.postid,
t2.text
from table1 t1
left join table2 t2 on t1.userid = t2.userid
在查询中使用内部联接来获取所有数据,然后在代码中用这些数据填充列表。这将只影响SQL一次。
此外,实体框架将为您提供所需内容。
是否改用EF将由您决定。