Linq 获取三个层次的数据

Linq 获取三个层次的数据,linq,linq-to-sql,Linq,Linq To Sql,我想开发一个讨论应用程序,其中有许多论坛。在每个论坛中可以有许多线程。在每个线程中,可以有许多帖子。在SQL中,我有以下四个表: 论坛 Id-int标识 Name-nvarchar//论坛名称 线程 Id-int标识 ForumId-FORUMS.Id的int外键 主题-女主角 POSTS Id-int标识 ThreadId-指向THREADS.Id的int外键 Submitter-用户的int外键。Id 按时提交 内容-nvarchar 用户 Id-int标识 名称-nvarch

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

论坛

  • Id-int标识
  • Name-nvarchar//论坛名称
线程

  • Id-int标识
  • ForumId-FORUMS.Id的int外键
  • 主题-女主角
POSTS

  • Id-int标识
  • ThreadId-指向THREADS.Id的int外键
  • Submitter-用户的int外键。Id
  • 按时提交
  • 内容-nvarchar
用户

  • Id-int标识
  • 名称-nvarchar
返回包含数据库中所有论坛的以下列的列表(列表中的一行对应于
论坛中的一行)的最佳方式是什么:

  • 论坛
    -论坛名称
  • 线程数-
    论坛中线程的总行数
  • 帖子数量-属于
    论坛的帖子总行数
  • 最后一个线程-线程。属于
    论坛的最新帖子主题
  • 最后一个帖子提交者-用户。属于
    论坛的最近帖子的名称
  • 上次帖子提交时间-POSTS.Submitted属于
    论坛的最新帖子
谢谢

类似于:

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
            }

谢谢工作非常漂亮,只需稍加调整。对我来说也是最有教育意义的。不客气。此链接可能有助于您进一步了解:。我没有适当的Linq教育的好处。我花了几天的时间在这个问题上尝试了各种各样的修正。运行SQL事件探查器,大多数事件都被分解为许多单独的SQL调用。我的问题是,我可以让一个部分工作,但我不能让整个事情在一起。