我有2个表,第一个包含帖子,第二个包含帖子的评论
Posts
-------
[ID] int
{Text] nvarchar(max)
.... (some other columns...)
Comments
--------
[ID] int
[PostID] int
[Comment] Nvarchar(1024)
.... (some other columns)
我想加载每篇文章的前20个帖子和前10个评论。问题是因为我要在我的页面上显示帖子,我需要在帖子后对每个帖子发表评论。
任何建议?
答案 0 :(得分:1)
这将帮助您获得一次旅行所需的所有数据。你的DataAdapter.Fill
命令应该是这样的:
SELECT TOP 20 * FROM Posts WHERE ...
然后在同一个命令中,用分号;
分隔,得到第二个SQL,这将导致在DataSet
中添加第二个表。
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将为您提供上面要求的所有帖子的评论,但只是每个PostID的最后10个评论。
请注意
SELECT TOP 20 ID FROM Posts WHERE ...
应该是第一个SQL语句中的确切SQL,除了单个返回字段是ID列。
填充数据集后,将其保存以供日后使用,以便在记录更改(选择发布)时,您可以获取已经为您的评论本地化的数据
抱歉这是在VB中
Dim DRs as Datarow() = {Your Dataset}.Tables(1).Select("PostID = " & {The current records ID})
希望这会有所帮助。它应该让你至少指向正确的方向。
答案 1 :(得分:0)
使用包含两个与关系相关联的数据表的数据集。您可以通过Visual Studio设计器实现这一目标。您还可以使用较新的实体框架。或者,您可以选择所有帖子,然后在循环浏览帖子时,发出SQL语句以从DB中获取注释(相当慢)。您也可以一次获取所有注释,然后在循环浏览帖子时,使用嵌套循环过滤掉相应的注释。您还可以使用LINQ查询按帖子对注释进行分组。这种特殊的猫可以通过许多方式剥皮: - )