我想顯示一個樹形結構是這樣的:故障顯示樹狀結構
Mission1
- 活性1
- PROJECT1
- 活性2
- 活性1
Mission2
- Activity3
- Project2的
- Activity3
但相反我收到重複的每個活動或項目,是不同的父元素就像一個列表這個:
Mission1
- 活性1
- PROJECT1
- 活性1
Mission1
- 活性2
我想將一個家長('Mission')元素下的Activities和Projects分組。
這裏是我的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'。'
在調試時,q2變量在結果視圖中引發此錯誤:{「Method'Project CreateFrom(Project)'不支持對SQL的轉換。」}它也不讓我返回q2.ToList()。 – Omni
@ negzero7我將你引用到我的帖子中專門討論的部分:''我不確定你的提供者是否可以在數據庫端執行該映射;如果不是在需要時在該查詢中引用一個AsEnumerable。 「需要的地方」幾乎可以肯定就是你們之前的所有事情以及集體旁邊的事情。 – Servy
忘了提及我添加了它們:var q2 = q.AsEnumerable()。GroupBy(row => row.Activity.Mission.Id) .Select(group => group.AsEnumerable()。GroupBy(row => row。 Activity.Id))AsEnumerable(); – Omni