获取三个层次结构的数据

时间:2013-01-02 12:58:06

标签: linq linq-to-sql

我想开发一个讨论应用程序,其中有许多论坛。在每个论坛中都可以有很多主题。在每个帖子中,都可以有很多帖子。在SQL中,我有以下四个表:

FORUMS

  • Id - int identity
  • 名称 - nvarchar //论坛名称

THREADS

  • Id - int identity
  • ForumId - FOR FORMSMS.Id的外键
  • 主题 - nvarchar

POSTS

  • Id - int identity
  • ThreadId - THREADS.Id的外键。
  • 提交者 - 将外键输入USERS.Id
  • SubmitterOn - datetime
  • 内容 - nvarchar

USERS

  • Id - int identity
  • 名称 - nvarchar

使用数据库中所有论坛的以下列返回列表的最佳方法是什么(列表中的一行对应FORUMS中的一行):

  • Forum - FORUMS.Name
  • 线程数 - Forum
  • 中THREADS中的总行数
  • 帖子号 - 属于Forum
  • 的POSTS中的总行数
  • 最后一个帖子 - THREADS。属于Forum
  • 的最新帖子的主题
  • 最后发布者 - USERS。属于Forum
  • 的最新帖子的名称
  • 最后发表时间 - POSTS.SubmittedOn属于Forum的最新帖子

由于

1 个答案:

答案 0 :(得分:1)

类似的东西:

var query = from f in context.Forums
            select new
            {
                Name = f.Name,
                Threads = f.Threads.Count(),
                Posts = f.Threads.Sum(t => t.Posts.Count()),
                LastThread = f.Threads.OrderByDescending(t => t.Id).First().Subject,
                LastPostSubmitter = f.Threads.SelectMany(t => t.Posts).OrderByDescending(p => p.SubmitterOn).First().Name,
                LastPostSubmitterTime = f.Threads.SelectMany(t => t.Posts).OrderByDescending(p => p.SubmitterOn).First().SubmitterOn
            }