我想知道这两个中哪一个更好:
1: context.Threads.Where(thread => thread.Id == threadId).Select(thread => thread.Posts).(...)
或
2: context.Posts.Where(post=> post.thread.Id == threadId).Select().(...)
两者有什么区别吗?
您还需要检查,除了有多少线程和帖子之外,两个查询正在生成什么SQL,以及它们在SQL Profiler中分别花费多长时间。
顺便说一句,我对你的两个问题都有疑问。我假设你正在使用实体框架(基于我看到你问的其他问题),所以你的Post类应该已经在那个表上有一个ThreadID(基于我在这里看到的导航属性,你应该在你的数据库中的Post表上有一个ThreadID字段)。在这种情况下,下面的查询可能更适合您的需要:
context.Posts.Where(p => p.threadID == threadId);
通过这样做,您将删除任何提及的Threads表,这将意味着EF将不必使用任何连接语句来获取您正在请求的信息。因为它不包括线程表,这应该是最快的方式去从一个线程获得所有的帖子。
这取决于有多少线程和多少帖子。