通过对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。这是正确的吗?

谢谢!

通过对SQL数据库的一次调用检索两个级别的数据

不太确定这是否合适,但为什么不让SecondRecord像一样成为FirstRecord的实例成员

public class SecondRecord
{
  //properties
  //Methods
}

public class FirstRecord
{
  public SecondRecord secondRecord;
}

然后,您可以从数据库中获得所有FirstRecordsecondrecord,并相应地进行填充,这将避免对数据库进行双重调用。

根据您编辑的帖子;是的,这就是应该做的。由于表之间已经存在关系,因此可以在userid列上执行leftjoin(因为每个用户可能/可能不一定都有帖子)并获取所有记录,然后相应地填充userinfopostinfo

select t1.userid, 
t1.username,
t2.postid,
t2.text
from table1 t1
left join table2 t2 on t1.userid = t2.userid

在查询中使用内部联接来获取所有数据,然后在代码中用这些数据填充列表。这将只影响SQL一次。

此外,实体框架将为您提供所需内容。

是否改用EF将由您决定。