如何使用C#构建树结构?

时间:2013-08-09 17:11:17

标签: c# tree

我很难弄清楚如何从基本上三个字典构建树。

它是这样的:

  • 项目>四季>集

所以基本上我有一个项目列表,然后每个项目可以有一个或多个季节,然后每个季节可以有一个或多个剧集。

我如何为此创建树结构,以便我可以将其作为JSON发回?

我真的很感激任何帮助,因为我正在努力解决这个问题。

这就是我的开始:

//projects
        var projectsDictionary = new Dictionary<int, string>();
        var ProjectSearchResult = new ProjectSearchResultController();
        var ProjectSearchCriteria = new GBLProjectSearchCriteria
        {
                ProjectName = projectName, SearchType = "P", QueryString = "?ProjectId="
        };
        var GBLProjectSearchResultListData = ProjectSearchResult.GetProjectSearchResultList(ProjectSearchCriteria);
        foreach (GBLProjectSearchResult item in GBLProjectSearchResultListData)
        {
            projectsDictionary.Add(item.Id, item.Title);
        }
        foreach (var project in projectsDictionary)
        {
            //seasons
            var seasonsDictionary = new Dictionary<int, string>();
            var SeasonSearchResult = new ProjectSearchResultController();
            var SeasonSearchCriteria = new GBLProjectSearchCriteria
            {
                    Id = project.Key, ProjectName = projectName, SearchType = "S", QueryString = "?ProjectId=" + projectId + "&SeasonId=",
            };
            var GBLSeasonSearchResultListData = SeasonSearchResult.GetProjectSearchResultList(SeasonSearchCriteria);
            foreach (GBLProjectSearchResult item in GBLSeasonSearchResultListData)
            {
                seasonsDictionary.Add(item.Id, item.Title);
            }
            foreach (var season in seasonsDictionary)
            {
                //episodes
                var episodesDictionary = new Dictionary<int, string>();
                var episodeSearchResult = new ProjectSearchResultController();
                var episodeSearchCriteria = new GBLProjectSearchCriteria
                {
                        Id = season.Key, ProjectName = projectName, SearchType = "E", QueryString = "?ProjectId=" + projectId + "&SeasonId=" + seasonId + "&EpisodeId=",
                };
                var GBLEpisodeSearchResultListData = episodeSearchResult.GetProjectSearchResultList(episodeSearchCriteria);
                foreach (GBLProjectSearchResult item in GBLEpisodeSearchResultListData)
                {
                    episodesDictionary.Add(item.Id, item.Title);
                }
            }
        }

1 个答案:

答案 0 :(得分:2)

目前的方法不起作用 可能这会对你有所帮助 创建三个名为

的类

项目 四季 集

public class Episodes
{
    public int Id { get; set; }
    public string Title { get; set; }
}

public class Seasons
{
    public int Id { get; set; }
    public string Title { get; set; }
    public IList<Episodes> { get; set; }
}

public class Project
{
    public int Id { get; set; }
    public string Title { get; set; }
    public IList<Seasons> { get; set; }
}

只需在方法顶部创建一个新的Project列表

IList<Project> projectList = new List<Project>();

之后填写数据时就像这样

IList<Project> projectList = new List<Project>();
var ProjectSearchResult = new ProjectSearchResultController();
var ProjectSearchCriteria = new GBLProjectSearchCriteria
{
        ProjectName = projectName, SearchType = "P", QueryString = "?ProjectId="
};
var GBLProjectSearchResultListData = ProjectSearchResult.GetProjectSearchResultList(ProjectSearchCriteria);
foreach (GBLProjectSearchResult item in GBLProjectSearchResultListData)
{
    Project project = new Project();
    project.Id = item.Id;
    project.Title = item.Title;
    projectList.Add(project);
}
foreach (var project in projectList)
{
    //seasons
    project.Seasons = new List<Seasons>();
    var SeasonSearchResult = new ProjectSearchResultController();
    var SeasonSearchCriteria = new GBLProjectSearchCriteria
    {
            Id = project.Key, ProjectName = projectName, SearchType = "S", QueryString = "?ProjectId=" + projectId + "&SeasonId=",
    };
    var GBLSeasonSearchResultListData = SeasonSearchResult.GetProjectSearchResultList(SeasonSearchCriteria);
    foreach (GBLProjectSearchResult item in GBLSeasonSearchResultListData)
    {
        Seasons season = new Seasons();
        season.Id = item.Id;
        season.Title = item.Title;
        project.Seasons.Add(season);
    }
    foreach (var season in project.Seasons)
    {
        //episodes
        season.Episodes = new List<Episodes>();
        var episodeSearchResult = new ProjectSearchResultController();
        var episodeSearchCriteria = new GBLProjectSearchCriteria
        {
                Id = season.Key, ProjectName = projectName, SearchType = "E", QueryString = "?ProjectId=" + projectId + "&SeasonId=" + seasonId + "&EpisodeId=",
        };
        var GBLEpisodeSearchResultListData = episodeSearchResult.GetProjectSearchResultList(episodeSearchCriteria);
        foreach (GBLProjectSearchResult item in GBLEpisodeSearchResultListData)
        {
            Episodes episode = new Episodes();
            episode.Id = item.Id;
            episode.Title = item.Title;
            season.Episodes.Add(episode);
        }
    }
}

或者可能不是编写如此多的代码,您也可以使用LINQ或Lambda表达式

将数据配置为JSON格式

您可以创建扩展方法:

    public static string ToJson<T>(this T objectToBeConverted, Func<T, object> filter)
    {
        return new JavaScriptSerializer().Serialize(filter(objectToBeConverted));
    }

可以像这样创建过滤器:

Func<IList<Project>, object> filter =
                new Func<IList<Project>, object>(projects => projects.Select(project => new { project.Id, project.Title }));