如何处理列表并将其内容放入新的父对象和子对象中?

时间:2013-08-01 03:12:25

标签: c#

我将数据放入这样的列表中:

var data = new List<string>();
            data.Add("topic1 - subtopic1");
            data.Add("topic1 - subtopic2");
            data.Add("topic1 - subtopic3");
            data.Add("topic2 - subtopic4");
            data.Add("topic3 - subtopic5");

我有两个班级:

public partial class Topic {
   public Topic()
   {
      this.SubTopics = new List<SubTopic>();
   }
   public int TopicId { get; set; }
   public string Name { get; set; }
   public virtual ICollection<SubTopic> SubTopics { get; set; }
}

public partial class SubTopic {
   public int SubTopicId { get; set; }
   public int Number { get; set; }
   public string Name { get; set; }
   public int TopicId { get; set; }
   public virtual Topic Topic { get; set; }
}

是否有一种简单的方法可以查看列表中的每条记录并将文本插入到左侧 将“ - ”转换为主题,将“ - ”右侧的文本转换为SubTopic?我的问题是我如何处理父子关系,以便使用这些数据我最终得到一个只有三个记录的Topic对象。

3 个答案:

答案 0 :(得分:3)

您也可以使用LINQ:

var separator = new[] { "-" };
var topics = data.Select(s => s.Split(separator, StringSplitOptions.RemoveEmptyEntries))
    .GroupBy(strings => strings[0])
    .Select(grouping => new Topic
    {
        Name = grouping.Key,
        SubTopics = grouping.Select(s => new SubTopic {Name = s[1]}).ToList()
    })
    .ToArray();

答案 1 :(得分:1)

你必须使用字典。像这样的东西,

Dictionary<string,Topic> topics = new Dictionary<string,Topic>();
foreach(string topic in data)
{
string[] values = topic.split(new string[]{"-"});
if( !topic.ContainsKey(values[0]) )
  topic.Add(values[0], new Topic());
Topic topic = topics [values[0];
topic.Name = values[0];
topic.SubTopics.Add( new SubTopic(){Name = values[1]};
}

答案 2 :(得分:1)

var data = new List<string>();
data.Add("topic1 - subtopic1");
data.Add("topic1 - subtopic2");
data.Add("topic1 - subtopic3");
data.Add("topic2 - subtopic4");
data.Add("topic3 - subtopic5");

var memo = new Dictionary<string, Topic>();

foreach (var parts in data.Select(item => item.Split('-').Select(x=>x.Trim()).ToArray()))
{
    if (!memo.ContainsKey(parts[0]))
    {
        memo.Add(parts[0], new Topic {Name = parts[0]});
    }
    memo[parts[0]].SubTopics.Add(new SubTopic { Name = parts[1], Topic = memo[parts[0]] });
}

var result = memo.Values.ToList();