首页 > 解决方案 > 从父级到最后一个子级的自引用列表项计数

问题描述

我有一个自引用的类别列表,其中每个类别都有儿童列表,同时有一个项目列表。示例 category1(有 3 个项目,有 1 个子子类别)子类别(有 1 个项目,有父类别 1,没有子类别)当我获取包含项目计数的类别列表时,我希望得到 category1(itemcount = 4 ) 但我得到的是 3

public class Category {
    public int Id { get; set; }
    public string Name { get; set; }
    public int? ParentId { get; set; }
    public virtual Category Parent { get; set; }
    public virtual ICollection<Category> Children { get; set; }
    public ICollection<Item> Items { get; set; }
}

下面是dto

public class CategoryForReturnDto
{
     public string Name { get; set; }
     public int Id { get; set; }
     public int ItemsCount { get; set; }
     public ICollection<Category> Children { get; set; }
     public int ParentId { get; set; }
}

最后是自动映射器

        CreateMap<Category, CategoryForReturnDto> ()
            .ForMember (dest => dest.ItemsCount, opt => {
                opt.MapFrom (src => src.Items.Count);
            });

项目模型是

public class Item {
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public ICollection<ItemPhoto> Photos { get; set; }
    public Category Category { get; set; }
    public int CategoryId { get; set; }
}

数据库示例:

在此处输入图像描述

在此处输入图像描述

标签: c#automapperasp.net-core-2.1

解决方案


你说你自己

示例 category1(有 3 个项目,有 1 个子子类别)

所以 ItemCount 正确返回 3。这正是您告诉它返回的内容:

opt.MapFrom (src => src.Items.Count);

我在子类别的 DTO 中看不到任何集合或属性;直到你把它们包括在内,你才能得到你想要的数字。(我不确定你会怎么称呼你想要的号码;ItemCount 具有误导性。)


推荐阅读