首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅使用linq从相关表中选择某些项目

仅使用linq从相关表中选择某些项目
EN

Stack Overflow用户
提问于 2010-03-10 20:55:57
回答 3查看 878关注 0票数 0

嗨,我有两张桌子,BlogPost和BlogComments

我想得到所有状态为“已发布”的BlogPosts。并获取每个状态为"published“的文章的所有BlogComments。

我正在使用类似这样的东西来获取博客帖子:

代码语言:javascript
复制
var BlogPosts = (from p in db.BlogPosts where p.State == State.Published select p).ToArray();

但由于与BlogComments的关系,它自动拥有所有的BlogComments (包括已发布和未发布)。

如何才能获得每个博客帖子的“已发布”评论(即已批准的评论)?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-03-10 21:00:05

尝试选择一个新的BlogPostViewModel,类似于BlogPost,但使用的是IEnumerable<BlogComment>,只包含博客帖子数据和一组已发布的评论。

代码语言:javascript
复制
    select new BlogPostViewModel {
        Title = p.Title,
        Body = p.Body,
        Comments = p.Comments.Where( c => c.Published );
    });

其中,BlogPostViewModel是:

代码语言:javascript
复制
public class BlogPostViewModel
{
     public string Title { get; set; }
     public string Body { get; set; }
     public IEnumerable<BlogComment> Comments { get; set; }
}
票数 4
EN

Stack Overflow用户

发布于 2010-03-10 21:00:17

代码语言:javascript
复制
var BlogPosts = from p in db.BlogPosts where p.State == State.Published select new {
    Post = p,
    Comments = (from c in db.BlogComments where c.State == State.Published && c.Post = p select c)
};
票数 0
EN

Stack Overflow用户

发布于 2010-03-10 21:00:37

代码语言:javascript
复制
var publishedComments = db.BlobPosts.Where(p => p.State == State.Published)
                                    .SelectMany(p => p.Comments)
                                    .Where(c => c.State == State.Published);

很抱歉没有使用查询语法。不过,希望这篇文章能让你上路。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2416974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档