このクラスから継承する他の3つのクラスを持つ抽象クラスがあります:-
public abstract class AbstractTask
{
[Key]
public int ID {get; set;}
[DisplayName("Featured Task")]
public bool Featured { get; set; }
// various other properties
}
public class HighLevelTask : AbstractTask
{
[DisplayName("Workstream Description")]
public String Workstream { get; set; }
public virtual ICollection<MidLevelTask> MidLevelTasks { get; set; }
}
public class MediumLevelTask : AbstractTask
{
public int HighLevelTaskID { get; set; }
public virtual ICollection<DetailLevelTask> DetailLevelTasks { get; set; }
}
public class DetailLevelTask : AbstractTask
{
public int MidLevelTaskID { get; set; }
}
したがって、高レベルのタスクには任意の数の中間レベルのタスクを含めることができ、中レベルのタスクには任意の数の詳細タスクを含めることができます。抽象クラスから継承されたプロパティによって、任意のレベルのタスクを「注目」として設定できます。
HTMLビューで、「注目の」タスクのネストされたリストを表示したいと思います。だから私はコントローラーアクションでこのようなものを考えてすべての注目のタスクを収集しますが、これを提示するための最良の方法については精神的なブロックにあります。
var qryHighLevelTasks = from t in context.HighLevelTasks
where t.Featured == true
select t;
var rsHighLevelTasks = qryHighLevelTasks.ToList();
foreach(var highLevelTask in rsHighLevelTasks)
{
// get all mid level featured tasks related to this high level task
var qryMidTasks = from midLevelTasks in context.MidLevelTasks
where midLevelTasks.Featured == true
&& midLevelTasks.HighLevelTaskID == highLevelTask.ID
select midLevelTasks;
var rsMidLevelTasks = qryMidTasks.ToList();
foreach (var midLevelTask in rsMidLevelTasks)
{
// get all detail level featured tasks related to this mid level task
var qryDetailTasks = from detailLevelTasks in context.DetailLevelTasks
where detailLevelTasks.Featured == true
&& detailLevelTasks.MidLevelTaskID == midLevelTask.ID
select detailLevelTasks;
var rsDetailLevelTasks = qryDetailTasks.ToList();
}
}
おそらく、注目のタスクを表す複合モデルが必要ですか?それとももっと良い方法はありますか?何かお勧めはありますか?