C#使用递归转换到另一个类

本文关键字:另一个 转换 递归 | 更新日期: 2023-09-27 18:29:18

我正在开发一个带有实体框架的MVC项目,我有一个类别表,如下所示:

public partial class Categories
{
    public Categories()
    {
        this.Categories1 = new HashSet<Categories>();
    }
    public int CategoryId { get; set; }
    public string CategoryName { get; set; }
    public Nullable<int> RelatedCategoryId { get; set; }
    public virtual ICollection<Categories> Categories1 { get; set; } //Children
    public virtual Categories Categories2 { get; set; } //Parent
}

当我用EF获取表数据时,它会给我想要的对象。有孩子的父母。

    class Program
    {
        static Entities db = new Entities();
        static void Main(string[] args)
        {
            List<Categories> categories = db.Categories.Where(item => item.RelatedId == null).ToList();
        }
}

通过relatedId == null部分,我得到了没有父类的主要类别。

到目前为止没有问题。但我想将ef返回给另一个类的categories对象强制转换为:

public class NewCategories
{
    public int Id { get; set; }
    public string Name { get; set; }
    private List<NewCategories> _subCategories;
    public NewCategories()
    {
        _subCategories= new List<NewCategories>();
    }
    public List<NewCategories> SubCategories { get { return _subCategories; } }
}

我想要新的List<NewCategories> newCategories对象。

我怎样才能做到这一点?

谢谢。

C#使用递归转换到另一个类

我认为您必须创建一个recursive方法来将Categories转换为NewCategories,类似这样的方法(我不确定它是否有效,但值得尝试):

public NewCategories ConvertToNewCategories(Categories cat){
  NewCategories nc = new NewCategories {Id = cat.CategoryId, Name = cat.CategoryName};
  nc.SubCategories.AddRange(cat.Categories1.Select(c=>ConvertToNewCategories(c)));
  return nc;
}
//Then
List<NewCategories> categories = db.Categories.Where(item => item.RelatedId == null)
                                              .Select(item=>ConvertToNewCategories(item))
                                              .ToList();