Contents というテーブルがあります。Contents には 1 対多の関係があるため、各コンテンツは親と子を持つことができます。私は EF Code First を使用しているので、 、、およびプロパティContent
を持つエンティティがあります。Id
ParentId
Parent
Children
今、私はコンテンツの ajax ベースのツリーを構築しています。以下に基づいて、コンテンツの 1 つのレベルの JSON を返す単純なアクションがありますparentId
。
public JsonResult GetContents(int? parentId = null)
{
return Json(db.Contents
.Where(p => p.ParentId == parentId)
.Select(p => new
{
id = p.Id,
name = p.Name
});
}
次にやりたいことは、何らかの値を自動的に選択することです。問題は、値がツリーの階層の奥深くにある可能性があることです。そのため、コンテンツごとに、選択した値がその子であるか孫であるかなどを知る必要があります。
public JsonResult GetContents(int? parentId = null, int selectedValue)
{
return Json(db.Contents
.Where(p => p.ParentId == parentId)
.Select(p => new
{
id = p.Id,
name = p.Name
isSelectedValueUnderThisHierarchy: // How can I efficiently implement this?
});
}
多くのクエリを実装するのは簡単ですが、私は物事をできるだけ効率的にしようとしています.EFは私が知る限り再帰的なメソッドを提供していないので、どこから始めればいいのか本当にわかりません.