前提・実現したいこと
getObjectメソッドで作成したsampleObjectListから、userIdとparentIdが紐づく箇所を階層構造にして
Accountクラスに格納したいです。
下記のコードだとs3のparentIdとs1のuserIdが一緒なので、
foreachの中でs1の場合childrenにs3が入るような形に直して、Accountクラスを作成したいです。
プログラムを始めたばかりで、拙い文章ですがよろしくお願いします。
発生している問題・エラーメッセージ
該当のソースコード
メインのクラス
public void Main(string[] args) { var accountList = new List<Account>(); var sampleObjectList = GetObject(); foreach (var item in sampleObjectList) { var account = new Account(); account.name = item.name; account.userId = item.userId; //ここでuserIdとParentIdが紐づくものをchildrenに格納したい。 accountList.Add(account); } } private List<sampleObject> GetObject() { var so = new List<sampleObject>(); var s1 = new sampleObject() { name = "aaa", userId = "aaa", parentId = null }; var s2 = new sampleObject() { name = "bbb", userId = "bbb", parentId = null }; var s3 = new sampleObject() { name = "ccc", userId = "ccc", parentId = "aaa" }; so.Add(s1); so.Add(s2); so.Add(s3); return so; }
モデルクラス
public class Account { public string userId { get; set; } public string name { get; set; } public List<Account> children { get; set; } } public class sampleObject { public string userId { get; set; } public string name { get; set; } public string parentId { get; set; } }
パット見思っただけですが、Account クラスの構造 (List<Account> children のところ) は正しいですか?
はい、今のコードですとlistにする意味はないかもしれませんが
親に対して複数子要素がある場合も想定してList<account>としております。
> 親に対して複数子要素がある場合も想定してList<account>としております。
それはちょっと自分的には違和感ありありという感じです。モデルクラスの構造を見直した方がよさそうな気がします。
親があって、それに複数の子があるという場合、例えば以下の記事の Blog (親), Post (子) のようにしてはいかがですか?
新しいデータベースの code First
https://docs.microsoft.com/ja-jp/ef/ef6/modeling/code-first/workflows/new-database