C# sql server:获取多条记录,每条记录都有多个子记录

C# sql server:获取多条记录,每条记录都有多个子记录,c#,sql-server,C#,Sql Server,我有两个表,第一个表包含帖子,第二个表包含帖子的评论 Posts ------- [ID] int {Text] nvarchar(max) .... (some other columns...) Comments -------- [ID] int [PostID] int [Comment] Nvarchar(1024) .... (some other columns) 我想加载前20个帖子和每个帖子的前10条评论。问题是,当我要在我的页面上显示帖子时,我需要在帖子之后对每个帖子进行

我有两个表,第一个表包含帖子,第二个表包含帖子的评论

Posts
-------
[ID] int
{Text] nvarchar(max)
.... (some other columns...)

Comments
--------
[ID] int
[PostID] int
[Comment] Nvarchar(1024)
.... (some other columns)
我想加载前20个帖子和每个帖子的前10条评论。问题是,当我要在我的页面上显示帖子时,我需要在帖子之后对每个帖子进行评论


有什么建议吗?

使用一个数据集,其中包含两个通过关系连接的数据表。您可以通过VisualStudioDesigner实现这一点。您还可以使用较新的实体框架。或者,您可以选择所有帖子,然后在循环浏览帖子时,发出SQL语句从DB中获取注释(相当慢)。您还可以一次抓取所有注释,然后在循环浏览帖子时,使用嵌套循环过滤掉相应的注释。您还可以使用LINQ查询按帖子对注释进行分组。这种特殊的猫可以通过多种方式剥皮:-)

这将帮助您在一次旅行中获得所需的所有数据。您的
DataAdapter.Fill
命令应该具有如下内容:

SELECT TOP 20 * FROM Posts WHERE ...
然后在同一个命令中,用分号分隔,使用第二个SQL,这将导致在
数据集中添加第二个表

SELECT * 
FROM 
    (SELECT 
         *, 
         ROW_NUMBER() OVER(PARTITION BY PostID ORDER BY ID desc) RowNum 
     FROM 
         Comments 
     WHERE 
         PostID IN (SELECT TOP 20 ID FROM Posts WHERE ...)
    ) tmp 
WHERE 
    RowNum <= 10
应该与第一条SQL语句中的SQL完全相同,但单个返回字段是ID列

填充数据集后,将其保存以备将来更改记录(选择Post)时使用,然后可以获取已在本地用于注释的数据

抱歉,这是在VB中

Dim DRs as Datarow() = {Your Dataset}.Tables(1).Select("PostID = " & {The current records ID})

希望这有帮助。这至少能让你找到正确的方向。

两个数据表当然有关系,但如何阅读每篇文章的评论。我曾想过在每一篇阅读评论的文章后打开并关闭一个连接,但这不是很慢吗?请不要只是要求我们为您解决问题。向我们展示你是如何试图自己解决问题的,然后向我们展示结果是什么,并告诉我们为什么你觉得它不起作用。请参阅“”,以获取您真正需要阅读的优秀文章。
Dim DRs as Datarow() = {Your Dataset}.Tables(1).Select("PostID = " & {The current records ID})