我正在尋找一種方法來獲取通用結果集,並使用jQuery Dyantree將其轉換爲具有ASP.NET MVC的樹結構。我有一個測試類,如:使用遞歸屬性ASP.NET/C#
public class GenericResults
{
public string ClaimId { get; set; }
public string DrugName { get; set; }
public int PatientId { get; set; }
//simulates database call, this could be any type of result set
public static List<GenericResults> MockDatabaseCall()
{
return new List<GenericResults>()
{
new GenericResults { ClaimId = "abc", DrugName="Drug 1", PatientId=1 },
new GenericResults { ClaimId = "bcd", DrugName="Drug 2", PatientId=1 },
new GenericResults { ClaimId = "def", DrugName="Drug 3", PatientId=1 },
new GenericResults { ClaimId = "fgi", DrugName="Drug 4", PatientId=1 },
new GenericResults { ClaimId = "ijk", DrugName="Drug 5", PatientId=2 },
new GenericResults { ClaimId = "klm", DrugName="Drug 6", PatientId=2 },
new GenericResults { ClaimId = "mno", DrugName="Drug 7", PatientId=2 },
new GenericResults { ClaimId = "pqr", DrugName="Drug 8", PatientId=2 },
new GenericResults { ClaimId = "qrs", DrugName="Drug 9", PatientId=2 },
new GenericResults { ClaimId = "stu", DrugName="Drug 10", PatientId=2 },
};
}
}
的數據需要在Dynatree的結構是這樣的:
public string Title { get; set; }
public List<TreeView> Children { get; set; }
public bool IsFolder
{
get
{
return this.Children.Count > 0;
}
}
在這個例子中,我們真的不需要ClaimId
財產,但我想重用已經寫入的存儲過程以供給樹,所以我想包含它。我需要將什麼組合成爲它自己的TreeView
對象,並且Children
屬性是所有具有分組內容值的記錄。到目前爲止,MockDatabaseCallMethod
,如果我分組在PatientId
我需要兩個TreeView
對象:每個唯一PatientId一個。我希望能夠遞歸地做到這一點,但不知道如何,因爲一些項目將離開(沒有孩子),那很好。這裏是我的嘗試:
public class TreeView
{
public string Title
{
get;
set;
}
public List<TreeView> Children { get; set; }
public bool IsFolder
{
get
{
return this.Children.Count > 0;
}
}
//made void for the time being to limit compilation errors
public static void ListToTree(string displayName,string groupedOn)
{
//seed data
List<GenericResults> results = GenericResults.MockDatabaseCall();
//"group" on the property passed by the user
var query = results.Select(x => x.GetType().GetProperty(groupedOn).GetValue(x,null)).Distinct();
foreach (var i in query)
{
var treeView = new TreeView();
treeView.Title = displayName;
//iterate over results, if object has the property value of what's currently being iterated over
//create a new TreeView object for it
treeView.Children = results.Where(x => x.GetType().GetProperty(groupedOn).GetValue(x, null) == i)
.Select(n => new TreeView
{
Title = displayName,
Children = x <--no idea what to do here
});
}
}
}
理想情況下,我想一個ToTree
擴展方法,但首先我想獲得這方面的一些指針。謝謝:)
這聽起來像你'TreeView'永遠不會明白你超過兩個級別 - 一個級別爲組值,另一個級別爲具有「當前」值的所有項目?如果是這樣,遞歸方法是矯枉過正的。只需使用一個簡單的'results.GroupBy(...)'或類似的項目分組。 – Sphinxxx