【问题标题】:IQueryable<Comments> GetComments: show comments with product detailsIQueryable<Comments> GetComments:显示带有产品详细信息的评论
【发布时间】:2014-05-25 21:16:42
【问题描述】:

我正在创建一个网络表单应用程序,允许用户查看产品列表,然后查看每个产品的详细信息。到目前为止,ProductDetails.aspx 显示的是产品图片、描述和价格。我从我的产品表中创建了一个单独的表用于评论(cmets 表)。我想让用户能够在他们的详细信息页面中登录和评论产品。我还希望在显示 ProductDetails 的任何时候都显示所有这些 cmets。这是我的查询以显示产品详细信息,让您了解到目前为止它是如何编写的。

public IQueryable<Product> GetProduct([QueryString("productID")] int? productId)
    {
        var _db = new Critic.Models.ProductContext();
        IQueryable<Product> query = _db.Products;

        if (productId.HasValue && productId > 0)
        {
            query = query.Where(p => p.ProductID == productId);
        }
        else
        {
            query = null;
        }
        return query;
    }

我想将 IQueryable 与 Comments 一起使用,创建一个 GetComments 方法,我可以在其中通过相应的键连接两个表。我不知道该怎么做。如果有人可以展示一些如何让我上路的例子,我将不胜感激。

public IQueryable<Comments> GetComments([QueryString("commentID")] int? commentId)
{
}

【问题讨论】:

    标签: c# asp.net join webforms iqueryable


    【解决方案1】:

    您可以通过对数据库的一个请求来实现这一点,而不是单独获取 cmets。您唯一需要处理的是因为您需要将您的产品和它的 cmets 连接在一起,您最终可能会为每个 cmets 拥有一个重复的产品,然后在您的 .aspx 页面上,您只需要显示一次选定的产品并循环您页面上的其余 cmets。

    public IQueryable<Product> GetProductDetails([QueryString("productID")] int? productId)
    {
        if (productId.HasValue && productId > 0)
        {
           using (var context = new Critic.Models.ProductContext()){
              var product= from p in context.Products
                  join pc in context.ProductComments p.ProductId equals pc.ProductId
                  where p.ProductId == productId
                  select new Product { 
                           ProductId = p.ProductId, 
                           CommentId = c.CommentId,
                           ProductName = p.ProductName, 
                           CommentDesc = c.CommentDesc
                         };
               return product;
           }
        }
        else
            return null;
    }
    

    希望它能给你一个线索。

    【讨论】:

    • 为什么 OP 需要有一个连接表?连接表用于 M:M 关系,这似乎是经典的 1(在产品方面)到许多(在评论方面)?
    • 感谢@JimMSDN 提到它,上面的代码有一个额外的连接,我已经更新了它。剩余的联接仅用于 Product 表中的其余产品详细信息,因此不仅适用于 cmets,否则使用 ProductId 获取 cmets 就足够了。
    猜你喜欢
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多