Linq SelectMany查询不起作用

时间:2016-05-11 15:12:03

标签: linq linq-to-sql linq-to-entities

我有以下数据库表,其中主题和注释之间的关系是1:N

Category
id
name

Topic
id
title
category_id

Comment
id
details
topic_id
deleted (boolean)  

我想要一个查询来计算每个类别中的总评论数。我有以下LINQ查询,但它不起作用:

@foreach (var cat in Model.AllPermissionSets.Keys)

{
   var commentCount = cat.Topics.Where(c => c.Comments.deleted != 0).SelectMany(x => x.Comments).Count();

   @* some other stuff *@
}

在Visual Studio中,我收到错误IList<Comment> doesn not contain a definition for deleted...

执行上述操作的正确语法是什么?

1 个答案:

答案 0 :(得分:4)

Comments是每个Topic实例上的集合类型属性。此集合没有deleted属性。但是集合中的每个项目( Comment 的单个实例)都有它。

var commentCount = cat.Topics.Where(c => c.Comments.Any(s=>!s.deleted))
                             .SelectMany(x => x.Comments).Count();

这将为您提供该类别所有帖子中未删除评论的计数。

第一部分cat.Topics.Where(c => c.Comments.Any(s=>!s.deleted))将为您提供已过滤的Topic集合列表,其中至少有一个未删除的评论。在第二部分中,您将选择所有这些帖子的Comments并进行计数。

复制 Ivan Stoev 的评论

以下查询也会产生相同的结果,但更干净。

var commentCount =cat.Topics.SelectMany(t => t.Comments.Where(c => !c.Deleted)).Count();