0

次のようなリストに入れたデータがあります。

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");

私は2つのクラスを持っています:

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

リストの各レコードを調べて、「-」の左側のテキストをトピックに挿入し、「-」の右側のテキストをサブトピックに挿入する簡単な方法はありますか? 私にとっての問題は、親子関係をどのように処理して、このデータを使用して 3 つのレコードしか持たない Topic オブジェクトになるかということです。

4

3 に答える 3

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();
于 2013-08-01T03:21:50.477 に答える
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]};
}
于 2013-08-01T03:20:19.840 に答える