0

私はEntityフレームワークを使用して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、親を持たない主要なカテゴリを取得します。

ここまでは問題ありません。categoriesしかし、 efが返したオブジェクトを次の別のクラスにキャストしたい:

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オブジェクトが欲しいです。

どうすればそれを達成できますか?

ありがとう。

4

1 に答える 1

1

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();
于 2013-08-28T21:00:40.353 に答える