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

本文关键字:对象 处理 何处理 列表 | 更新日期: 2023-09-27 18:25:41

我将数据放入如下列表中:

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; }
}

有没有一种简单的方法可以让我浏览列表中的每一条记录,并将文本插入"-"进入主题,"-"右侧的文本进入子主题?对我来说,问题是如何处理父子关系,以便使用这些数据最终得到一个只有三条记录的Topic对象。

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

您也可以使用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();

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

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]};
}
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();