代码之家  ›  专栏  ›  技术社区  ›  LiamB

亚音速3.0和“链接”表

  •  0
  • LiamB  · 技术社区  · 15 年前

    我有以下设置。

    博客 博客范畴 类别

    一篇博文可以有许多类别,一个类别可以在许多博文中。(因此中间表。

    我该如何获得一个类别中所有博客文章的列表呢?

    我已经尝试过了,但似乎无法正确处理(我收到一个iQuery->IEnumerable cast错误)

    public IEnumerable<BlogPost> FetchAllBlogs(int? CatId)
    {
            return from c in CategoryLink.All()
                       where c.CategoryID == CatId
                       select c.BlogPost;
    
    }
    

    好的,如下所示,我已经尝试了以下方法。

    return from blogToCategories in subtext_Link.All()
                          join blogPosts in subtext_Content.All() on blogToCategories.BlogId equals blogPosts.BlogId
                          where blogToCategories.CategoryID == CatId
                          orderby (blogPosts.DateAdded) descending
                          select blogPosts;
    

    现在这是wierd,似乎连接是错误的,因为每当链接表(链接类别到博客的表)中有一些数据时,它会返回所有博客。

    还尝试了下面的内容。

    BlogList = new TransformDB().Select
                      .From<subtext_Content>()
                      .InnerJoin<subtext_Link>(subtext_LinksTable.BlogIdColumn, subtext_ContentTable.BlogIdColumn)
                      .Where(subtext_LinksTable.CategoryIDColumn).IsEqualTo(CatId)
                      .ExecuteTypedList<subtext_Content>();
    

    生成的SQL

    选择[dbo]。[子文本链接]。[linkid], [DBO]。[子文本链接]。[标题], [dbo]。[子文本链接]。[url], [dbo]。[子文本链接]。[rss], [DBO]。[子文本链接]。[活动], [DBO]。[子文本链接]。[CategoryID], [dbo]。[subext_links]。[blogid], [dbo]。[子文本链接]。[postid], [dbo]。[子文本链接]。[newwindow], [dbo]。[子文本链接]。[rel], \ r\n[dbo]。[subext_content]。[id], [dbo]。[subext_content]。[title], [dbo]。[subext_content]。[dateadd], [dbo]。[subext_content]。[postType], [dbo]。[subext_content]。[author], [dbo]。[subext_content]。[email], [dbo]。[subext_content]。[blogid], [dbo]。[subext_content]。[description], [DBO]。[SubText_Content]。[DateUpdated], [dbo]。[subext_content]。[text], [dbo]。[subext_content]。[feedbackcount], [dbo]。[subext_content]。[postconfig], [dbo]。[subext_content]。[entryname], [dbo]。[子文本\u内容]。[日期联合]\r\n 来自[dbo]。[子文本链接]\r\n内部 在上加入[dbo]。[subext_content] [dbo]。[subext_links]。[blogid]。= [dbo]。[subext_content]。[blogid]\r\n 在哪里? [DBO]。[子文本链接]。[CategoryID]= @ 0

    3 回复  |  直到 15 年前
        1
  •  1
  •   Adam Cooper    15 年前

    您需要加入blottocategory和blogpost表:

    public IEnumerable<BlogPost> FetchAllBlogs(int? CatId)
    {
      return from blogToCategories in BlogToCategory.All() 
             join blogPosts in BlogPost.All() on blogPosts.Id equals blogToCategories.BlogId 
             where blogToCategories.CategoryID == CatId
             select blogPosts;
    
    }
    
        2
  •  0
  •   Kris Krause    15 年前

    我已经尝试过了,但似乎无法正确处理(我收到一个iQuery->IEnumerable cast错误)

    使用.tolist()方法怎么样?

    http://msdn.microsoft.com/en-us/library/bb342261.aspx

        3
  •  0
  •   GC.    15 年前

    是的,有一种更优雅的方式。如果使用的是ActiveRecord模板,并且category和blogpost表与blogtocategory表具有外键关系,则生成的category和blogpost类都将具有表示该关系的IQueryable属性:

    IQueryable<BlogToCategory> BlogToCategories {...}
    

    你想要的是

    IQueryable<BlogPost> BlogPosts
    类别类的属性。 为类别创建分部类,并添加iQueryable属性:
        public IQueryable<BlogPost> BlogPosts
        {
            get
            {
                var repo = BlogPost.GetRepo();
                return from items in repo.GetAll()
                       join linkItems in BlogToCategories 
                       on items.CatID equals linkItems.CategoryID
                       select items;
            }
        }
    

    现在您只需调用cat.blogposts.tolist()—tolist()应该是可用的,您确定包含扩展方法的命名空间了吗?