【问题标题】:How to retrive all comments for a specific post?如何检索特定帖子的所有评论?
【发布时间】:2025-11-27 15:20:06
【问题描述】:

在尝试获取特定帖子的 cmets 时遇到了一些障碍。使用 MVC 3 和 VBNET。帖子 url 看起来像 /Blog/Post/1。我可以毫无问题地显示帖子,但需要从 Comments 表中获取 PostId=1 的 cmets。我尝试了一个 Linq 内连接语句

Dim results = From P In _rdsqlconn.Posts Where P.PostId = id Join c In _rdsqlconn.Comments On P.PostId Equals c.PostId Select P



Public Class RDSQLConn
        Inherits DbContext

        Public Sub New()

        End Sub


        Property Posts As DbSet(Of Post)
        Property Categories As DbSet(Of Category)
        Property Comments As DbSet(Of Comment)

    End Class

但这会引发:

`Unable to cast object of type 'System.Data.Entity.Infrastructure.DbQuery`1[RiderDesignMvcBlog.Core.Entities.Post]' to type 'RiderDesignMvcBlog.Core.Entities.Post'.`

但是,如下所示的 SQL 查询可以正常工作。我可以将这个 sql 语句传递给我的 EF 吗?

Select * From Posts  INNER JOIN Comments on dbo.Posts.PostId = Comments.PostId where dbo.Posts.PostId = 1 

【问题讨论】:

  • 为什么要手动执行join?如果您的帖子使用导航属性正确映射到评论,您可以使用即时加载 (Include) 方法来加载 cmets。
  • @LadislavMrnka,导航属性是否仅在我有 edmx 文件时才有效?我只有我的实体和 DBContext 类。
  • 嗨阿肖克。有一阵子了。我假设您同时发现了导航属性、流畅的映射和其他东西?

标签: sql-server asp.net-mvc vb.net entity-framework


【解决方案1】:
Dim results = From P In _rdsqlconn.Posts Join c In _rdsqlconn.Comments On P.PostId Equals c.PostId 
Where P.PostId = id 
Select P

【讨论】:

  • 我尝试了您提供的 linq 语句,但它仍然抛出 Unable to cast object of type 'System.Data.Entity.Infrastructure.DbQuery`1[RiderDesignMvcBlog.Core.Entities.Post]' to type ' RiderDesignMvcBlog.Core.Entities.Post'。
最近更新 更多