C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■90488 / )  Re[1]: 2つのリストから1つのリストを作成する方法
□投稿者/ 魔界の仮面弁士 (2110回)-(2019/03/14(Thu) 15:18:27)
No90487 (河童 さん) に返信
> uf.day1 = d.taion //?dateが「1」のときに、day1に体温をセットしたいです。

"1" という文字列から day1 プロパティにアクセスしようとすると、
リフレクション頼りになってしまいますね。

この場合は UserInfo クラスに手を加えて、
 uf.day[d.date] = d.taion;
あるいは
 uf[d.date] = d.taion;
の形でアクセスできるよう改修してみては如何でしょう?




private void Form1_Load(object sender, EventArgs e)
{
  #region サンプルデータ
  d_dataList = new List<d_data>
  {
    new d_data { date = "1", user_id = "1", taion = "36"},
    new d_data { date = "2", user_id = "1", taion = "38"},
    new d_data { date = "3", user_id = "1", taion = "39"},
    new d_data { date = "1", user_id = "2", taion = "35"},
    new d_data { date = "2", user_id = "2", taion = "37"},
    new d_data { date = "3", user_id = "2", taion = "36"},
  };
  userList = new List<m_User>
  {
    new m_User { user_id = "1", user_name = "testA", user_kana = null },
    new m_User { user_id = "2", user_name = "testB", user_kana = null },
  };
  #endregion

  // データグリッドのソース作成
  var dictList = userList.ToDictionary(k => k.user_id);
  List<UserInfo> list = d_dataList
    .GroupBy(x => x.user_id, x => new { x.date, x.taion })
    .Select(y => new UserInfo(y.ToDictionary(k => k.date, v => v.taion))
    {
      user_id = dictList[y.Key].user_id,
      user_name = dictList[y.Key].user_name,
      user_kana = dictList[y.Key].user_kana
    }).ToList();

  // ソースセット
  this.dgvRiyojoho.DataSource = list;
}


public class UserInfo
{
  private readonly Dictionary<string, string> days;
  public UserInfo() { this.days = new Dictionary<string, string>(); }
  public UserInfo(IDictionary<string, string> days) { this.days = new Dictionary<string, string>(days); }
  private string getDay(string d) { return days.ContainsKey(d) ? days[d] : null; }

  public string user_id { get; set; }
  public string user_name { get; set; }
  public string user_kana { get; set; }

  public string day1 { get { return getDay("1"); } set { days["1"] = value; } }
  public string day2 { get { return getDay("2"); } set { days["2"] = value; } }
  public string day3 { get { return getDay("3"); } set { days["3"] = value; } }
  public string day4 { get { return getDay("4"); } set { days["4"] = value; } }
  // 以下略
}
返信 編集キー/


管理者用

- Child Tree -