次のようなツリー構造を表示したいと思います。
Mission1
- アクティビティ1
- Project1
- アクティビティ2
- アクティビティ1
Mission2
- アクティビティ3
- Project2
- アクティビティ3
しかし、代わりに、次のように異なるすべてのアクティビティまたはプロジェクトの親要素を繰り返すリストを取得しています。
Mission1
- アクティビティ1
- Project1
- アクティビティ1
Mission1
- アクティビティ2
アクティビティとプロジェクトを1つの親(「ミッション」)要素の下にグループ化したい。
これが私のLINQクエリです:
var q = from mission in _context.tMissions
join activity in _context.tActivities on mission.id equals activity.missionId
join project in _context.tDefaultEventTypes on activity.id equals project.activityId
where !project.isRemoved && project.defaultCategoryId == 4
orderby mission.name
select CreateFrom(project);
return q.ToList();
次に、それをリストにバインドして、ページに表示します。これが私のaspxです:
<asp:DataList ID="dlTierTypes" runat="server">
<ItemTemplate>
<li><%# Eval("Activity.Mission.Name") %></li>
<ul>
<li><%# Eval("Activity.Name") %></li>
<ul>
<li><%# Eval("Name") %></li>
</ul>
</ItemTemplate>
</asp:DataList>
そして、背後にあるコードはそれをバインドするだけです:
public void SetTierTree(IEnumerable<DefaultEventType> tierList)
{
dlTierTypes.DataSource = tierList;
dlTierTypes.DataBind();
}
これに正確に取り組む方法がわかりません。
編集-これがリポジトリ内の私の新しい関数です。
public ICollection<DefaultEventType> GetTierTree()
{
var q = from mission in _context.tMissions
join activity in _context.tActivities on mission.id equals activity.missionId
join project in _context.tDefaultEventTypes on activity.id equals project.activityId
where !project.isRemoved && project.defaultCategoryId == 4
orderby mission.name
select new DefaultEventType(project.tierLevel.TryParseEnum<GanttType>(GanttType.Unknown), DefaultCategoryRepository.CreateFrom(project.tDefaultCategory))
{
//t = new DefaultEventType(project.tierLevel.TryParseEnum<GanttType>(GanttType.Unknown), DefaultCategoryRepository.CreateFrom(project.tDefaultCategory)),
AllowNumericSuffix = project.allowNumericSuffix,
AttachMilestoneMoniker = project.attachMilestoneMoniker,
Description = project.description,
Id = project.id,
IsReadOnly = project.isReadOnly,
IsSticky = project.isSticky,
Name = project.name,
Sid = project.sid,
Style = project.style.TryParseEnum<GanttElementStyle>(GanttElementStyle.Unknown),
TimeStamp = project.createdDT,
UpdatedTimeStamp = project.updatedDT,
Activity = new Activity { Id = activity.id, Name = activity.name, Mission = new Mission { Id = mission.id, Name = mission.name } }
};
var q2 = q.GroupBy(row => row.Activity.Mission.Id)
.Select(group => group.GroupBy(row => row.Activity.Id));
return q2.Cast<DefaultEventType>().ToList();
}
しかし、ページを表示すると次のエラーが発生します:'タイプ'System.Collections.Generic.List 1[System.Linq.IGrouping
2 [System.Int32、DefaultEventType]]'からタイプ'DefaultEventType'に変換できませんでした。