我有2个实体描绘了Post
和Comments
。
public class Post
{
public int Id { get; set; }
public ICollection<Comment> Comments { get; set; }
//other properties
//Unmapped property
public int NumberOfComments { get; set; }
}
public class Comment
{
public int Id { get; set; }
public Post Post { get; set; }
public int PostId { get; set; }
// other properties
}
现在我希望NumberOfComments
属性填充帖子的实际评论数。
尝试将查询结果投影到一组帖子中 模特没有锻炼。
尝试加入表格然后按帖子ID分组仍然没有 似乎有效。
我不能简单地return p.Comments.Count;
作为属性定义,因为我在查询期间不包括评论。我只想要评论的计数,而不是内存中的整个集合。
答案 0 :(得分:1)
这是我发现的方式。
以下课程是必要的:
public class PostExtraData
{
public Post post { get; set; }
public int NumberOfComments { get; set; }
}
public class Post
{
public int Id { get; set; }
public ICollection<Comment> Comments { get; set; }
//other properties
}
public class Comment
{
public int Id { get; set; }
public Post Post { get; set; }
public int PostId { get; set; }
// other properties
}
不要将PostExtraData
类添加到上下文中。
在控制器中我们写了以下内容(在这种情况下,获取帖子列表):
return _context.Post
.Select(p => new PostExtraData
{
Post= p,
NumberOfComments = p.Comments.Count(),
})
.ToList();
答案 1 :(得分:0)
您可以使用.Count()
获取评论数量。
public class Post
{
public int Id{ get; set; }
public ICollection<Comment> Comments { get; set; }
//other properties
//Unmapped property
public int NumberOfComments { get { return Comments.Count(); } }
}
答案 2 :(得分:0)
通常您可以检索评论导航,您可以执行以下操作:
public class Post
{
public int Id { get; set; }
public ICollection<Comment> Comments { get; set; }
//other properties
//Unmapped property: Since it's value depends on the Comments collection
//we don't need to define the setter. If the collection is null, it'll
//return zero.
public int NumberOfComments
{
get
{
return this.Comments?.Count() ?? 0;
}
}
}
关于此行... return this.Comments?.Count() ?? 0;
这里我们使用两个空运算符,Null条件运算符?
和Null Coalescing Operator ??
。
第一个通过在调用.Count()
之前立即返回值null来避免代码引发错误,如果Comments属性为null,则当左表达式为null时第二个操作返回右表达式,所以如果{ {1}}返回null,它会给你0。