• R/O
  • HTTP
  • SSH
  • HTTPS

コミット

タグ
未設定

よく使われているワード(クリックで追加)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

EveryDB2のデータベースを読み込んでWinFormでGUI表示するサンプル


コミットメタ情報

リビジョン41e7d4cc93ceda722bafabf0b4970b3d7fc1cfe1 (tree)
日時2021-06-01 04:47:41
作者yoshy <yoshy@user...>
コミッターyoshy

ログメッセージ

temp_20210601_0447

変更サマリ

差分

--- a/App/Adaptor/Gateway/ViewModel/Dto/UmaRaceRowDto.cs
+++ b/App/Adaptor/Gateway/ViewModel/Dto/UmaRaceRowDto.cs
@@ -8,13 +8,13 @@ using UmaTest.Infra.Helper;
88
99 namespace UmaTest.App.Adaptor.Gateway.ViewModel.Dto
1010 {
11- public class UmaRaceRowDto : NUmaRaceInfo
11+ public class UmaRaceRowDto : UmaRaceInfo
1212 {
1313 public UmaRaceRowDto()
1414 {
1515 }
1616
17- public UmaRaceRowDto(NUmaRaceInfo umaRace)
17+ public UmaRaceRowDto(UmaRaceInfo umaRace)
1818 {
1919 BeanHelper.Copy(this, umaRace);
2020 }
@@ -26,5 +26,43 @@ namespace UmaTest.App.Adaptor.Gateway.ViewModel.Dto
2626 public string GradeName => CodeHelper.GetInstance().GetName(CodeHelper.GRADE_CODE, Race.Gradecd, "-");
2727
2828 public string Kimete => CodeHelper.GetInstance().GetName(CodeHelper.KYAKUSITU_KUBUN, Kyakusitukubun, "不明");
29+
30+ public string BataijyuFormatted
31+ {
32+ get
33+ {
34+ string zogensa;
35+ try
36+ {
37+ zogensa = !String.IsNullOrEmpty(Zogensa) ? $" ({Zogenfugo + int.Parse(Zogensa).ToString()})" : String.Empty;
38+ }
39+ catch (Exception)
40+ {
41+ zogensa = $" ({Zogenfugo}{Zogensa})";
42+ }
43+ return !String.IsNullOrEmpty(Bataijyu) ? $"{Bataijyu}{zogensa}" : "";
44+ }
45+ }
46+
47+ public string TimeFormatted
48+ {
49+ get => Time.Length >= 4 ? $"{Time.Substring(0,1)}:{Time.Substring(1, 2)}.{Time.Substring(3, 1)}" : Time;
50+ }
51+
52+ public string FutanFormatted
53+ {
54+ get
55+ {
56+ try
57+ {
58+ return !String.IsNullOrEmpty(Futan) ? (int.Parse(Futan) / 10.0f).ToString() : String.Empty;
59+ }
60+ catch (Exception)
61+ {
62+
63+ return Futan;
64+ }
65+ }
66+ }
2967 }
3068 }
--- a/App/Adaptor/Gateway/ViewModel/Dto/UmaSummaryRowDto.cs
+++ b/App/Adaptor/Gateway/ViewModel/Dto/UmaSummaryRowDto.cs
@@ -4,6 +4,7 @@ using System.Globalization;
44 using System.Linq;
55 using System.Text;
66 using System.Threading.Tasks;
7+using UmaTest.App.Domain.Model.Repository.Database.Dto;
78 using UmaTest.App.Domain.Model.Repository.Database.Entity.EveryDB2;
89 using UmaTest.Infra.Helper;
910
@@ -21,16 +22,24 @@ namespace UmaTest.App.Adaptor.Gateway.ViewModel.Dto
2122 Wakuban = "仮";
2223 }
2324
24- public UmaSummaryRowDto(NToku uma)
25+ public UmaSummaryRowDto(TokuUmaInfo uma)
2526 {
2627 BeanHelper.Copy(this, uma);
28+ if (uma.Uma != null)
29+ {
30+ BeanHelper.Copy(this, uma.Uma, true);
31+ }
32+
2733 Wakuban = "仮";
2834 }
2935
30- public UmaSummaryRowDto(NUmaRace uma)
36+ public UmaSummaryRowDto(UmaInfo uma)
3137 {
32- // FIXME
3338 BeanHelper.Copy(this, uma);
39+ if (uma.Uma != null)
40+ {
41+ BeanHelper.Copy(this, uma.Uma, true);
42+ }
3443 }
3544
3645 public string Wakuban { get; set; }
@@ -38,33 +47,10 @@ namespace UmaTest.App.Adaptor.Gateway.ViewModel.Dto
3847
3948 public string SenSuu { get; set; }
4049
41- public string ChichiBamei { get => Konso?.Chichi.Bamei; }
50+ public string ChichiBamei { get => Konso != null ? Konso.Chichi.Bamei : String.Empty; }
4251
4352 public string HahaChichiBamei { get => Konso?.HahaChichi.Bamei; }
4453
45- public string BataijyuFormatted {
46- get
47- {
48- return !String.IsNullOrEmpty(Konso?.Bataijyu) ? $"{Konso?.Bataijyu} ({Konso?.Zogenfugo + int.Parse(Konso?.Zogensa).ToString()})" : "";
49- }
50- }
51-
52- public string KonsoNinki { get => Konso?.OddsTanpku?.Tanninki; }
53-
54- public float KonsoTanOdds {
55- get
56- {
57- string odds = Konso?.OddsTanpku?.Tanodds;
58- if(String.IsNullOrEmpty(odds))
59- {
60- return 0; // String.Empty;
61- }
62-
63- //return int.Parse(odds.Substring(0, 3)).ToString() + "." + odds.Substring(3, 1);
64- return int.Parse(odds) / 10.0f;
65- }
66- }
67-
6854 public UmaRaceRowDto Konso { get; set; }
6955
7056 public UmaRaceRowDto Zenso { get; set; }
--- a/App/Adaptor/Gateway/ViewModel/ManualHorseListViewModel.cs
+++ b/App/Adaptor/Gateway/ViewModel/ManualHorseListViewModel.cs
@@ -8,9 +8,9 @@ using System.Windows.Forms;
88 using System.Windows.Input;
99 using UmaTest.App.Adaptor.Controller;
1010 using UmaTest.App.Domain.UseCase.Request;
11-using UmaTest.App.Domain.UseCase.Response;
1211 using UmaTest.Infra.Adaptor.Command;
1312 using UmaTest.Infra.Adaptor.Controller;
13+using UmaTest.Infra.Adaptor.ViewModel;
1414 using UmaTest.Infra.Log;
1515 using ICommand = UmaTest.Infra.Adaptor.Command.ICommand;
1616
--- a/App/Adaptor/Gateway/ViewModel/SearchRaceViewModel.cs
+++ b/App/Adaptor/Gateway/ViewModel/SearchRaceViewModel.cs
@@ -8,11 +8,10 @@ using System.Windows.Forms;
88 using System.Windows.Input;
99 using UmaTest.App.Adaptor.Controller;
1010 using UmaTest.App.Adaptor.Gateway.ViewModel.Dto;
11-using UmaTest.App.Domain.Model.Repository.Database.Entity.EveryDB2;
1211 using UmaTest.App.Domain.UseCase.Request;
13-using UmaTest.App.Domain.UseCase.Response;
1412 using UmaTest.Infra.Adaptor.Command;
1513 using UmaTest.Infra.Adaptor.Controller;
14+using UmaTest.Infra.Adaptor.ViewModel;
1615 using UmaTest.Infra.Log;
1716 using ICommand = UmaTest.Infra.Adaptor.Command.ICommand;
1817
--- a/App/Adaptor/Gateway/ViewModel/TokuRaceListViewModel.cs
+++ b/App/Adaptor/Gateway/ViewModel/TokuRaceListViewModel.cs
@@ -8,11 +8,10 @@ using System.Windows.Forms;
88 using System.Windows.Input;
99 using UmaTest.App.Adaptor.Controller;
1010 using UmaTest.App.Adaptor.Gateway.ViewModel.Dto;
11-using UmaTest.App.Domain.Model.Repository.Database.Entity.EveryDB2;
1211 using UmaTest.App.Domain.UseCase.Request;
13-using UmaTest.App.Domain.UseCase.Response;
1412 using UmaTest.Infra.Adaptor.Command;
1513 using UmaTest.Infra.Adaptor.Controller;
14+using UmaTest.Infra.Adaptor.ViewModel;
1615 using UmaTest.Infra.Log;
1716 using ICommand = UmaTest.Infra.Adaptor.Command.ICommand;
1817
--- a/App/Adaptor/Presenter/AsyncLoadManualUmaListPresenter.cs
+++ b/App/Adaptor/Presenter/AsyncLoadManualUmaListPresenter.cs
@@ -140,7 +140,7 @@ namespace UmaTest.App.Gateway.Presenter
140140
141141 umaSummaryList.Add(summaryDto);
142142
143- if (!res.Races.TryGetValue(kettoNum, out IEnumerable<NUmaRaceInfo> umaRaces) || (umaRaces.Count() == 0))
143+ if (!res.Races.TryGetValue(kettoNum, out IEnumerable<UmaRaceInfo> umaRaces) || (umaRaces.Count() == 0))
144144 {
145145 Logger.Warn($"血統登録番号: {kettoNum} の馬レース情報が見つかりませんでした");
146146 continue;
@@ -148,7 +148,7 @@ namespace UmaTest.App.Gateway.Presenter
148148
149149 List<UmaRaceRowDto> umaRaceList = new List<UmaRaceRowDto>();
150150
151- foreach (NUmaRaceInfo umaRace in umaRaces)
151+ foreach (UmaRaceInfo umaRace in umaRaces)
152152 {
153153 NRace detail = umaRace.Race;
154154 Logger.Debug($"{detail.Year}/{detail.Monthday.Substring(0, 2)}/{detail.Monthday.Substring(2, 2)} - {detail.Hondai} - {detail.Kyori} - {detail.Gradecd} - {detail.Jyokencd1} - {umaRace.Nyusenjyuni} - {umaRace.Kakuteijyuni}");
--- a/App/Adaptor/Presenter/AsyncLoadSelectedRaceUmaListPresenter.cs
+++ b/App/Adaptor/Presenter/AsyncLoadSelectedRaceUmaListPresenter.cs
@@ -39,14 +39,15 @@ namespace UmaTest.App.Gateway.Presenter
3939 AsyncLoadSelectedRaceUmaListRequest req = baseRes.Request as AsyncLoadSelectedRaceUmaListRequest;
4040 AsyncLoadSelectedRaceUmaListResponse res = baseRes as AsyncLoadSelectedRaceUmaListResponse;
4141
42- IEnumerable<NUmaRace> horses = res.Horses;
42+ IEnumerable<UmaInfo> horses = res.Horses;
4343
44- foreach (NUmaRace uma in horses)
44+ foreach (UmaInfo uma in horses)
4545 {
4646 string kettoNum = uma.Kettonum;
4747
4848 statusBar.SetStatusText($"血統登録番号: {kettoNum}, 馬名: {uma.Bamei} の情報をレンダリング中です...");
4949
50+ // FIXME
5051 UmaSummaryRowDto summaryDto = new UmaSummaryRowDto(uma);
5152
5253 foreach (ChakudosuuSummary chakudosuu in res.Summaries[kettoNum])
@@ -123,7 +124,7 @@ namespace UmaTest.App.Gateway.Presenter
123124
124125 umaSummaryList.Add(summaryDto);
125126
126- if (!res.Races.TryGetValue(kettoNum, out IEnumerable<NUmaRaceInfo> umaRaces)) // || (umaRaces.Count() == 0))
127+ if (!res.Races.TryGetValue(kettoNum, out IEnumerable<UmaRaceInfo> umaRaces)) // || (umaRaces.Count() == 0))
127128 {
128129 Logger.Warn($"血統登録番号: {kettoNum} の馬レース情報が見つかりませんでした");
129130 continue;
@@ -131,7 +132,7 @@ namespace UmaTest.App.Gateway.Presenter
131132
132133 List<UmaRaceRowDto> umaRaceList = new List<UmaRaceRowDto>();
133134
134- foreach (NUmaRaceInfo umaRace in umaRaces)
135+ foreach (UmaRaceInfo umaRace in umaRaces)
135136 {
136137 NRace detail = umaRace.Race;
137138 Logger.Debug($"{detail.Year}/{detail.Monthday.Substring(0, 2)}/{detail.Monthday.Substring(2, 2)} - {detail.Hondai} - {detail.Kyori} - {detail.Gradecd} - {detail.Jyokencd1} - {umaRace.Nyusenjyuni} - {umaRace.Kakuteijyuni}");
--- a/App/Adaptor/Presenter/AsyncLoadTokuUmaListPresenter.cs
+++ b/App/Adaptor/Presenter/AsyncLoadTokuUmaListPresenter.cs
@@ -45,7 +45,7 @@ namespace UmaTest.App.Gateway.Presenter
4545 {
4646 Logger.Info($"血統登録番号: {kettoNum}");
4747
48- if (!res.Horses.TryGetValue(kettoNum, out NToku uma))
48+ if (!res.Horses.TryGetValue(kettoNum, out TokuUmaInfo uma))
4949 {
5050 Logger.Warn($"血統登録番号: {kettoNum} の馬情報が見つかりませんでした");
5151 continue;
@@ -129,7 +129,7 @@ namespace UmaTest.App.Gateway.Presenter
129129
130130 umaSummaryList.Add(summaryDto);
131131
132- if (!res.Races.TryGetValue(kettoNum, out IEnumerable<NUmaRaceInfo> umaRaces) || (umaRaces.Count() == 0))
132+ if (!res.Races.TryGetValue(kettoNum, out IEnumerable<UmaRaceInfo> umaRaces) || (umaRaces.Count() == 0))
133133 {
134134 Logger.Warn($"血統登録番号: {kettoNum} の馬レース情報が見つかりませんでした");
135135 continue;
@@ -137,7 +137,7 @@ namespace UmaTest.App.Gateway.Presenter
137137
138138 List<UmaRaceRowDto> umaRaceList = new List<UmaRaceRowDto>();
139139
140- foreach (NUmaRaceInfo umaRace in umaRaces)
140+ foreach (UmaRaceInfo umaRace in umaRaces)
141141 {
142142 NRace detail = umaRace.Race;
143143 Logger.Debug($"{detail.Year}/{detail.Monthday.Substring(0, 2)}/{detail.Monthday.Substring(2, 2)} - {detail.Hondai} - {detail.Kyori} - {detail.Gradecd} - {detail.Jyokencd1} - {umaRace.Nyusenjyuni} - {umaRace.Kakuteijyuni}");
@@ -145,6 +145,10 @@ namespace UmaTest.App.Gateway.Presenter
145145 umaRaceList.Add(new UmaRaceRowDto(umaRace));
146146 }
147147
148+ // HACK
149+ summaryDto.Zenso = umaRaceList.Count > 0 ? umaRaceList[0] : null;
150+ summaryDto.SenSuu = umaRaceList.Count.ToString();
151+
148152 umaRaceMap.Add(kettoNum, umaRaceList);
149153 }
150154
--- a/App/Adaptor/Presenter/LoadManualUmaListPresenter.cs
+++ b/App/Adaptor/Presenter/LoadManualUmaListPresenter.cs
@@ -117,7 +117,7 @@ namespace UmaTest.App.Gateway.Presenter
117117
118118 umaSummaryList.Add(summaryDto);
119119
120- if (!res.Races.TryGetValue(kettoNum, out IEnumerable<NUmaRaceInfo> umaRaces) || (umaRaces.Count() == 0))
120+ if (!res.Races.TryGetValue(kettoNum, out IEnumerable<UmaRaceInfo> umaRaces) || (umaRaces.Count() == 0))
121121 {
122122 Logger.Warn($"血統登録番号: {kettoNum} の馬レース情報が見つかりませんでした");
123123 return res;
@@ -125,7 +125,7 @@ namespace UmaTest.App.Gateway.Presenter
125125
126126 List<UmaRaceRowDto> umaRaceList = new List<UmaRaceRowDto>();
127127
128- foreach (NUmaRaceInfo umaRace in umaRaces)
128+ foreach (UmaRaceInfo umaRace in umaRaces)
129129 {
130130 NRace detail = umaRace.Race;
131131 Logger.Debug($"{detail.Year}/{detail.Monthday.Substring(0, 2)}/{detail.Monthday.Substring(2, 2)} - {detail.Hondai} - {detail.Kyori} - {detail.Gradecd} - {detail.Jyokencd1} - {umaRace.Nyusenjyuni} - {umaRace.Kakuteijyuni}");
--- a/App/Domain/Model/Logic/ITokuUmaLogic.cs
+++ b/App/Domain/Model/Logic/ITokuUmaLogic.cs
@@ -1,11 +1,12 @@
11 using System.Collections.Generic;
22 using System.Threading.Tasks;
3+using UmaTest.App.Domain.Model.Repository.Database.Dto;
34 using UmaTest.App.Domain.Model.Repository.Database.Entity.EveryDB2;
45
56 namespace UmaTest.App.Domain.Model.Logic
67 {
78 public interface ITokuUmaLogic
89 {
9- Task<Dictionary<string, NToku>> LoadHorsesByTokuRaceAsync(NTokuRace race);
10+ Task<Dictionary<string, TokuUmaInfo>> LoadHorsesByTokuRaceAsync(NTokuRace race);
1011 }
1112 }
\ No newline at end of file
--- a/App/Domain/Model/Logic/IUmaRaceLogic.cs
+++ b/App/Domain/Model/Logic/IUmaRaceLogic.cs
@@ -8,9 +8,9 @@ namespace UmaTest.App.Domain.Model.Logic
88 public interface IUmaRaceLogic
99 {
1010 Dictionary<string, IEnumerable<ChakudosuuSummary>> LoadChakudosuuSummaries(List<string> kettoNumList);
11- Dictionary<string, IEnumerable<NUmaRaceInfo>> LoadRacesByKettoNumList(List<string> kettoNumList);
11+ Dictionary<string, IEnumerable<UmaRaceInfo>> LoadRacesByKettoNumList(List<string> kettoNumList);
1212 Task<Dictionary<string, IEnumerable<ChakudosuuSummary>>> LoadChakudosuuSummariesAsync(List<string> kettoNumList);
13- Task<Dictionary<string, IEnumerable<NUmaRaceInfo>>> LoadRacesByKettoNumListAsync(List<string> kettoNumList);
14- Task<IEnumerable<NUmaRace>> LoadHorsesBySelectedRaceAsync(NRace race);
13+ Task<Dictionary<string, IEnumerable<UmaRaceInfo>>> LoadRacesByKettoNumListAsync(List<string> kettoNumList);
14+ Task<IEnumerable<UmaInfo>> LoadHorsesBySelectedRaceAsync(NRace race);
1515 }
1616 }
\ No newline at end of file
--- a/App/Domain/Model/Logic/TokuUmaLogic.cs
+++ b/App/Domain/Model/Logic/TokuUmaLogic.cs
@@ -5,6 +5,7 @@ using System.Linq;
55 using System.Text;
66 using System.Threading.Tasks;
77 using UmaTest.App.Domain.Model.Repository.Database.Dao;
8+using UmaTest.App.Domain.Model.Repository.Database.Dto;
89 using UmaTest.App.Domain.Model.Repository.Database.Entity.EveryDB2;
910 using UmaTest.Infra.Helper;
1011
@@ -18,7 +19,7 @@ namespace UmaTest.App.Domain.Model.Logic
1819 this.dao = dao;
1920 }
2021
21- public async Task<Dictionary<string, NToku>> LoadHorsesByTokuRaceAsync(NTokuRace race)
22+ public async Task<Dictionary<string, TokuUmaInfo>> LoadHorsesByTokuRaceAsync(NTokuRace race)
2223 {
2324 return await LogicHelper.tryLogic(() =>
2425 {
--- a/App/Domain/Model/Logic/UmaRaceLogic.cs
+++ b/App/Domain/Model/Logic/UmaRaceLogic.cs
@@ -23,12 +23,12 @@ namespace UmaTest.App.Domain.Model.Logic
2323 this.statusBar = statusBar;
2424 }
2525
26- public Dictionary<string, IEnumerable<NUmaRaceInfo>> LoadRacesByKettoNumList(List<string> kettoNumList)
26+ public Dictionary<string, IEnumerable<UmaRaceInfo>> LoadRacesByKettoNumList(List<string> kettoNumList)
2727 {
2828 return TaskHelper.WaitSingle(LoadRacesByKettoNumListAsync(kettoNumList));
2929 }
3030
31- public async Task<Dictionary<string, IEnumerable<NUmaRaceInfo>>> LoadRacesByKettoNumListAsync(List<string> kettoNumList)
31+ public async Task<Dictionary<string, IEnumerable<UmaRaceInfo>>> LoadRacesByKettoNumListAsync(List<string> kettoNumList)
3232 {
3333 return await LogicHelper.tryLogic(() =>
3434 {
@@ -65,11 +65,11 @@ namespace UmaTest.App.Domain.Model.Logic
6565 });
6666 }
6767
68- public Task<IEnumerable<NUmaRace>> LoadHorsesBySelectedRaceAsync(NRace race)
68+ public Task<IEnumerable<UmaInfo>> LoadHorsesBySelectedRaceAsync(NRace race)
6969 {
7070 return LogicHelper.tryLogic(() =>
7171 {
72- return dao.FindAllRacesBySelectedRaceAsync(race);
72+ return dao.FindAllHorsesBySelectedRaceAsync(race);
7373 });
7474 }
7575 }
--- a/App/Domain/Model/Repository/Database/Dao/INTokuUmaDao .cs
+++ b/App/Domain/Model/Repository/Database/Dao/INTokuUmaDao .cs
@@ -1,11 +1,12 @@
11 using System.Collections.Generic;
22 using System.Threading.Tasks;
3+using UmaTest.App.Domain.Model.Repository.Database.Dto;
34 using UmaTest.App.Domain.Model.Repository.Database.Entity.EveryDB2;
45
56 namespace UmaTest.App.Domain.Model.Repository.Database.Dao
67 {
78 public interface INTokuUmaDao
89 {
9- Task<Dictionary<string, NToku>> FindAllHorsesByTokuRaceAsync(NTokuRace race);
10+ Task<Dictionary<string, TokuUmaInfo>> FindAllHorsesByTokuRaceAsync(NTokuRace race);
1011 }
1112 }
\ No newline at end of file
--- a/App/Domain/Model/Repository/Database/Dao/INUmaRaceDao.cs
+++ b/App/Domain/Model/Repository/Database/Dao/INUmaRaceDao.cs
@@ -7,12 +7,12 @@ namespace UmaTest.App.Domain.Model.Repository.Database.Dao
77 {
88 public interface INUmaRaceDao
99 {
10- Dictionary<string, IEnumerable<NUmaRaceInfo>> FindAllRacesByKettoNumList(List<string> kettoNumList);
10+ Dictionary<string, IEnumerable<UmaRaceInfo>> FindAllRacesByKettoNumList(List<string> kettoNumList);
1111 IEnumerable<ChakudosuuSummary> FindChakudosuuSummary(string kettoNum);
12- Task<Dictionary<string, IEnumerable<NUmaRaceInfo>>> FindAllRacesByKettoNumListAsync(List<string> kettoNumList);
12+ Task<Dictionary<string, IEnumerable<UmaRaceInfo>>> FindAllRacesByKettoNumListAsync(List<string> kettoNumList);
1313 Task<IEnumerable<ChakudosuuSummary>> FindChakudosuuSummaryAsync(string kettoNum);
1414
15- Task<IEnumerable<NUmaRace>> FindAllRacesBySelectedRaceAsync(NRace race);
15+ Task<IEnumerable<UmaInfo>> FindAllHorsesBySelectedRaceAsync(NRace race);
1616 Task<Dictionary<string, IEnumerable<ChakudosuuSummary>>> FindAllChakudosuuSummariesAsync(List<string> kettoNumList);
1717 }
1818 }
\ No newline at end of file
--- a/App/Domain/Model/Repository/Database/Dao/NTokuUmaDao.cs
+++ b/App/Domain/Model/Repository/Database/Dao/NTokuUmaDao.cs
@@ -4,6 +4,7 @@ using System.Collections.Generic;
44 using System.Linq;
55 using System.Text;
66 using System.Threading.Tasks;
7+using UmaTest.App.Domain.Model.Repository.Database.Dto;
78 using UmaTest.App.Domain.Model.Repository.Database.Entity.EveryDB2;
89 using UmaTest.Infra.Helper;
910 using UmaTest.Infra.Log;
@@ -19,22 +20,29 @@ namespace UmaTest.App.Domain.Model.Repository.Database.Dao
1920 this.db = db;
2021 }
2122
22- public Task<Dictionary<string, NToku>> FindAllHorsesByTokuRaceAsync(NTokuRace race)
23+ public Task<Dictionary<string, TokuUmaInfo>> FindAllHorsesByTokuRaceAsync(NTokuRace race)
2324 {
24- return Task.Run<Dictionary<string, NToku>>(() =>
25+ return Task.Run<Dictionary<string, TokuUmaInfo>>(() =>
2526 {
2627 return DbHelper.tryQuery(() =>
2728 {
28- Dictionary<string, NToku> res = new Dictionary<string, NToku>();
29+ Dictionary<string, TokuUmaInfo> res = new Dictionary<string, TokuUmaInfo>();
2930
3031 var sql = Sql.Builder
31- .Where("year = @0 and jyocd = @1 and kaiji = @2 and nichiji = @3 and racenum = @4",
32+ //.Where("year = @0 and jyocd = @1 and kaiji = @2 and nichiji = @3 and racenum = @4",
33+ // race.Year, race.Jyocd, race.Kaiji, race.Nichiji, race.Racenum)
34+ //.OrderBy("bamei, kettonum desc");
35+ .Select("tu.*, u.*")
36+ .From("n_toku tu")
37+ .LeftJoin("n_uma u")
38+ .On("tu.kettonum = u.kettonum")
39+ .Where("tu.year = @0 and tu.jyocd = @1 and tu.kaiji = @2 and tu.nichiji = @3 and tu.racenum = @4",
3240 race.Year, race.Jyocd, race.Kaiji, race.Nichiji, race.Racenum)
33- .OrderBy("bamei, kettonum desc");
41+ .OrderBy("tu.bamei, tu.kettonum desc");
3442
35- var horses = db.Query<NToku>(sql);
43+ var horses = db.Query<TokuUmaInfo, NUma, TokuUmaInfo>((t, u) => { t.Uma = u; return t; }, sql);
3644
37- foreach (NToku horse in horses)
45+ foreach (TokuUmaInfo horse in horses)
3846 {
3947 if (!res.ContainsKey(horse.Kettonum))
4048 {
--- a/App/Domain/Model/Repository/Database/Dao/NUmaRaceDao.cs
+++ b/App/Domain/Model/Repository/Database/Dao/NUmaRaceDao.cs
@@ -19,59 +19,23 @@ namespace UmaTest.App.Domain.Model.Repository.Database.Dao
1919 this.db = db;
2020 }
2121
22- public Dictionary<string, IEnumerable<NUmaRaceInfo>> FindAllRacesByKettoNumList(List<string> kettoNumList)
22+ public Dictionary<string, IEnumerable<UmaRaceInfo>> FindAllRacesByKettoNumList(List<string> kettoNumList)
2323 {
2424 return TaskHelper.WaitSingle(FindAllRacesByKettoNumListAsync(kettoNumList));
2525 }
2626
27- public Task<Dictionary<string, IEnumerable<NUmaRaceInfo>>> FindAllRacesByKettoNumListAsync(List<string> kettoNumList)
27+ public Task<Dictionary<string, IEnumerable<UmaRaceInfo>>> FindAllRacesByKettoNumListAsync(List<string> kettoNumList)
2828 {
29- return Task.Run<Dictionary<string, IEnumerable<NUmaRaceInfo>>>(() =>
29+ return Task.Run<Dictionary<string, IEnumerable<UmaRaceInfo>>>(() =>
3030 {
3131 return DbHelper.tryQuery(() =>
3232 {
33- Dictionary<string, IEnumerable<NUmaRaceInfo>> res = new Dictionary<string, IEnumerable<NUmaRaceInfo>>();
34-
35- //foreach (string kettoNum in kettoNumList)
36- //{
37- // var sql = Sql.Builder
38- // .Append("SELECT ur.*, r.*")
39- // .From("n_uma_race ur")
40- // .Append("INNER JOIN n_race r USING(year, jyocd, kaiji, nichiji, racenum)")
41- // .Where("ur.kettonum = @0", kettoNum)
42- // .OrderBy("ur.year desc, ur.monthday desc");
43-
44- // var races = db.Query<NUmaRace, NRace, NUmaRaceInfo>((ur, r) => new NUmaRaceInfo(ur, r), sql);
45- // res.Add(kettoNum, races);
46- //}
47-
48- //foreach (string kettoNum in kettoNumList)
49- //{
50- // string sql = "SELECT ur.*, r.*, k.*, c.*, u1.*, u2.* "
51- // + "FROM n_uma_race ur "
52- // + "INNER JOIN n_race r USING(year, jyocd, kaiji, nichiji, racenum) "
53- // + "LEFT JOIN n_kisyu k USING(kisyucode) "
54- // + "LEFT JOIN n_chokyo c ON ur.chokyosicode = c.chokyosicode "
55- // + "LEFT JOIN n_uma u1 ON ur.kettonum1 = u1.kettonum "
56- // + "LEFT JOIN n_uma u2 ON ur.kettonum2 = u2.kettonum "
57- // + "WHERE ur.kettonum = @0 "
58- // + "ORDER BY ur.kettonum, ur.year desc, ur.monthday desc";
59-
60- // Func<NUmaRace, NRace, NKisyu, NChokyo, NUma, NUma, NUmaRaceInfo> mapper =
61- // (ur, r, k, c, u1, u2) => new NUmaRaceInfo(ur, r, k, c, u1, u2);
62-
63- // Type[] mapTypes = new Type[] { typeof(NUmaRace), typeof(NRace), typeof(NKisyu),
64- // typeof(NChokyo), typeof(NUma), typeof(NUma) };
65-
66- // IEnumerable<NUmaRaceInfo> races = db.Query<NUmaRaceInfo>(mapTypes, mapper, sql, kettoNum);
67-
68- // res.Add(kettoNum, races.ToList());
69- //}
33+ Dictionary<string, IEnumerable<UmaRaceInfo>> res = new Dictionary<string, IEnumerable<UmaRaceInfo>>();
7034
7135 string sql = "SELECT ur.*, r.*, k.*, c.*, ot.*, h1.*, h5.* "
7236 + "FROM n_uma_race ur "
73- + "INNER JOIN n_uma u USING(kettonum) "
7437 + "INNER JOIN n_race r USING(year, jyocd, kaiji, nichiji, racenum) "
38+ + "LEFT JOIN n_uma u USING(kettonum) "
7539 + "LEFT JOIN n_kisyu k USING(kisyucode) "
7640 + "LEFT JOIN n_chokyo c ON ur.chokyosicode = c.chokyosicode "
7741 + "LEFT JOIN n_odds_tanpuku ot USING(year, jyocd, kaiji, nichiji, racenum, umaban) "
@@ -80,25 +44,25 @@ namespace UmaTest.App.Domain.Model.Repository.Database.Dao
8044 + "WHERE ur.kettonum in (@KettoNums) "
8145 + "ORDER BY ur.kettonum, ur.year desc, ur.monthday desc";
8246
83- Func<NUmaRace, NRace, NKisyu, NChokyo, NOddsTanpuku, NHansyoku, NHansyoku, NUmaRaceInfo> mapper =
84- (ur, r, k, c, o, h1, h5) => new NUmaRaceInfo(ur, r, k, c, o, h1, h5);
47+ Func<NUmaRace, NRace, NKisyu, NChokyo, OddsInfo, NHansyoku, NHansyoku, UmaRaceInfo> mapper =
48+ (ur, r, k, c, o, h1, h5) => new UmaRaceInfo(ur, r, k, c, o, h1, h5);
8549
8650 Type[] mapTypes = new Type[] { typeof(NUmaRace), typeof(NRace), typeof(NKisyu),
87- typeof(NChokyo), typeof(NOddsTanpuku), typeof(NHansyoku), typeof(NHansyoku) };
51+ typeof(NChokyo), typeof(OddsInfo), typeof(NHansyoku), typeof(NHansyoku) };
8852
89- IEnumerable<NUmaRaceInfo> races = db.Query<NUmaRaceInfo>(
53+ IEnumerable<UmaRaceInfo> races = db.Query<UmaRaceInfo>(
9054 mapTypes, mapper, sql, new { KettoNums = kettoNumList.ToArray() });
9155
92- foreach (NUmaRaceInfo race in races)
56+ foreach (UmaRaceInfo race in races)
9357 {
9458 string kettoNum = race.Kettonum;
95- if (!res.TryGetValue(kettoNum, out IEnumerable<NUmaRaceInfo> splitRaces))
59+ if (!res.TryGetValue(kettoNum, out IEnumerable<UmaRaceInfo> splitRaces))
9660 {
97- splitRaces = new List<NUmaRaceInfo>();
61+ splitRaces = new List<UmaRaceInfo>();
9862 res.Add(kettoNum, splitRaces);
9963 }
10064
101- ((List<NUmaRaceInfo>)splitRaces).Add(race);
65+ ((List<UmaRaceInfo>)splitRaces).Add(race);
10266 }
10367
10468 return res;
@@ -106,18 +70,22 @@ namespace UmaTest.App.Domain.Model.Repository.Database.Dao
10670 });
10771 }
10872
109- public Task<IEnumerable<NUmaRace>> FindAllRacesBySelectedRaceAsync(NRace race)
73+ public Task<IEnumerable<UmaInfo>> FindAllHorsesBySelectedRaceAsync(NRace race)
11074 {
111- return Task.Run<IEnumerable<NUmaRace>>(() =>
75+ return Task.Run<IEnumerable<UmaInfo>>(() =>
11276 {
11377 return DbHelper.tryQuery(() =>
11478 {
11579 var sql = Sql.Builder
116- .Where("year = @0 and jyocd = @1 and kaiji = @2 and nichiji = @3 and racenum = @4",
80+ .Select("ur.*, u.*")
81+ .From("n_uma_race ur")
82+ .LeftJoin("n_uma u")
83+ .On("ur.kettonum = u.kettonum")
84+ .Where("ur.year = @0 and ur.jyocd = @1 and ur.kaiji = @2 and ur.nichiji = @3 and ur.racenum = @4",
11785 race.Year, race.Jyocd, race.Kaiji, race.Nichiji, race.Racenum)
118- .OrderBy("wakuban, umaban");
86+ .OrderBy("ur.wakuban, ur.umaban");
11987
120- return db.Query<NUmaRace>(sql).ToList();
88+ return db.Query<UmaInfo, NUma, UmaInfo>((ur, u) => { ur.Uma = u; return ur; }, sql).ToList();
12189 });
12290 });
12391 }
--- /dev/null
+++ b/App/Domain/Model/Repository/Database/Dto/OddsInfo.cs
@@ -0,0 +1,36 @@
1+using PetaPoco;
2+using System;
3+using System.Collections.Generic;
4+using System.Linq;
5+using System.Text;
6+using System.Threading.Tasks;
7+using UmaTest.App.Domain.Model.Repository.Database.Entity.EveryDB2;
8+using UmaTest.Infra.Log;
9+
10+namespace UmaTest.App.Domain.Model.Repository.Database.Dto
11+{
12+ public class OddsInfo : NOddsTanpuku
13+ {
14+ [Ignore]
15+ public string TanOddsFormatted
16+ {
17+ get
18+ {
19+ if (String.IsNullOrEmpty(Tanodds))
20+ {
21+ return String.Empty;
22+ }
23+
24+ try
25+ {
26+ return (int.Parse(Tanodds) / 10.0f).ToString();
27+ }
28+ catch (Exception)
29+ {
30+
31+ return Tanodds;
32+ }
33+ }
34+ }
35+ }
36+}
--- /dev/null
+++ b/App/Domain/Model/Repository/Database/Dto/TokuUmaInfo.cs
@@ -0,0 +1,21 @@
1+using PetaPoco;
2+using System;
3+using System.Collections.Generic;
4+using System.Linq;
5+using System.Text;
6+using System.Threading.Tasks;
7+using UmaTest.App.Domain.Model.Repository.Database.Entity.EveryDB2;
8+using UmaTest.Infra.Helper;
9+
10+namespace UmaTest.App.Domain.Model.Repository.Database.Dto
11+{
12+ public class TokuUmaInfo : NToku
13+ {
14+ public TokuUmaInfo()
15+ {
16+ }
17+
18+ [Ignore]
19+ public NUma Uma { get; set; }
20+ }
21+}
--- /dev/null
+++ b/App/Domain/Model/Repository/Database/Dto/UmaInfo.cs
@@ -0,0 +1,21 @@
1+using PetaPoco;
2+using System;
3+using System.Collections.Generic;
4+using System.Linq;
5+using System.Text;
6+using System.Threading.Tasks;
7+using UmaTest.App.Domain.Model.Repository.Database.Entity.EveryDB2;
8+using UmaTest.Infra.Helper;
9+
10+namespace UmaTest.App.Domain.Model.Repository.Database.Dto
11+{
12+ public class UmaInfo : NUmaRace
13+ {
14+ public UmaInfo()
15+ {
16+ }
17+
18+ [Ignore]
19+ public NUma Uma { get; set; }
20+ }
21+}
--- a/App/Domain/Model/Repository/Database/Dto/NUmaRaceInfo.cs
+++ b/App/Domain/Model/Repository/Database/Dto/UmaRaceInfo.cs
@@ -9,19 +9,19 @@ using UmaTest.App.Domain.Model.Repository.Database.Entity.EveryDB2;
99
1010 namespace UmaTest.App.Domain.Model.Repository.Database.Dto
1111 {
12- public class NUmaRaceInfo : NUmaRace
12+ public class UmaRaceInfo : NUmaRace
1313 {
14- public NUmaRaceInfo()
14+ public UmaRaceInfo()
1515 {
1616 }
1717
18- public NUmaRaceInfo(NUmaRace ur, NRace r, NKisyu kisyu, NChokyo chokyo, NOddsTanpuku oddsTanpuku, NHansyoku chichi, NHansyoku hahachichi)
18+ public UmaRaceInfo(NUmaRace ur, NRace r, NKisyu kisyu, NChokyo chokyo, OddsInfo oddsTanpuku, NHansyoku chichi, NHansyoku hahachichi)
1919 {
2020 BeanHelper.Copy(this, ur);
2121 Race = r;
2222 Kisyu = kisyu;
2323 Chokyo = chokyo;
24- OddsTanpku = oddsTanpuku;
24+ OddsTanpuku = oddsTanpuku;
2525 Chichi = chichi;
2626 HahaChichi = hahachichi;
2727 }
@@ -36,7 +36,7 @@ namespace UmaTest.App.Domain.Model.Repository.Database.Dto
3636 public NChokyo Chokyo { get; set; }
3737
3838 [Ignore]
39- public NOddsTanpuku OddsTanpku { get; set; }
39+ public OddsInfo OddsTanpuku { get; set; }
4040
4141 [Ignore]
4242 public NHansyoku Chichi { get; set; }
--- a/App/Domain/Translator/ILoadManualUmaListTranslator.cs
+++ b/App/Domain/Translator/ILoadManualUmaListTranslator.cs
@@ -12,7 +12,7 @@ namespace UmaTest.App.Domain.Translator
1212 LoadManualUmaListResponse res, LoadManualUmaListRequest req,
1313 List<string> kettoNums,
1414 Dictionary<string, NUma> horses,
15- Dictionary<string, IEnumerable<NUmaRaceInfo>> races,
15+ Dictionary<string, IEnumerable<UmaRaceInfo>> races,
1616 Dictionary<string, IEnumerable<ChakudosuuSummary>> summaries);
1717 }
1818 }
\ No newline at end of file
--- a/App/Domain/Translator/ILoadSelectedRaceUmaListTranslator.cs
+++ b/App/Domain/Translator/ILoadSelectedRaceUmaListTranslator.cs
@@ -13,8 +13,8 @@ namespace UmaTest.App.Domain.Translator
1313 AsyncLoadSelectedRaceUmaListResponse res,
1414 AsyncLoadSelectedRaceUmaListRequest req,
1515 List<string> kettoNums,
16- IEnumerable<NUmaRace> horses,
17- Dictionary<string, IEnumerable<NUmaRaceInfo>> races,
16+ IEnumerable<UmaInfo> horses,
17+ Dictionary<string, IEnumerable<UmaRaceInfo>> races,
1818 Dictionary<string, IEnumerable<ChakudosuuSummary>> summaries);
1919 }
2020 }
\ No newline at end of file
--- a/App/Domain/Translator/ILoadTokuUmaListTranslator.cs
+++ b/App/Domain/Translator/ILoadTokuUmaListTranslator.cs
@@ -11,8 +11,8 @@ namespace UmaTest.App.Domain.Translator
1111 AsyncLoadTokuUmaListResponse Translate(
1212 AsyncLoadTokuUmaListResponse res, AsyncLoadTokuUmaListRequest req,
1313 List<string> kettoNums,
14- Dictionary<string, NToku> horses,
15- Dictionary<string, IEnumerable<NUmaRaceInfo>> races,
14+ Dictionary<string, TokuUmaInfo> horses,
15+ Dictionary<string, IEnumerable<UmaRaceInfo>> races,
1616 Dictionary<string, IEnumerable<ChakudosuuSummary>> summaries);
1717 }
1818 }
\ No newline at end of file
--- a/App/Domain/Translator/LoadManualUmaListTranslator.cs
+++ b/App/Domain/Translator/LoadManualUmaListTranslator.cs
@@ -17,7 +17,7 @@ namespace UmaTest.App.Domain.Translator
1717 LoadManualUmaListResponse res, LoadManualUmaListRequest req,
1818 List<string> kettoNums,
1919 Dictionary<string, NUma> horses,
20- Dictionary<string, IEnumerable<NUmaRaceInfo>> races,
20+ Dictionary<string, IEnumerable<UmaRaceInfo>> races,
2121 Dictionary<string, IEnumerable<ChakudosuuSummary>> summaries)
2222 {
2323
--- a/App/Domain/Translator/LoadSelectedRaceUmaListTranslator.cs
+++ b/App/Domain/Translator/LoadSelectedRaceUmaListTranslator.cs
@@ -17,8 +17,8 @@ namespace UmaTest.App.Domain.Translator
1717 AsyncLoadSelectedRaceUmaListResponse res,
1818 AsyncLoadSelectedRaceUmaListRequest req,
1919 List<string> kettoNums,
20- IEnumerable<NUmaRace> horses,
21- Dictionary<string, IEnumerable<NUmaRaceInfo>> races,
20+ IEnumerable<UmaInfo> horses,
21+ Dictionary<string, IEnumerable<UmaRaceInfo>> races,
2222 Dictionary<string, IEnumerable<ChakudosuuSummary>> summaries)
2323 {
2424 res.KettoNums = kettoNums;
--- a/App/Domain/Translator/LoadTokuUmaListTranslator.cs
+++ b/App/Domain/Translator/LoadTokuUmaListTranslator.cs
@@ -16,8 +16,8 @@ namespace UmaTest.App.Domain.Translator
1616 public AsyncLoadTokuUmaListResponse Translate(
1717 AsyncLoadTokuUmaListResponse res, AsyncLoadTokuUmaListRequest req,
1818 List<string> kettoNums,
19- Dictionary<string, NToku> horses,
20- Dictionary<string, IEnumerable<NUmaRaceInfo>> races,
19+ Dictionary<string, TokuUmaInfo> horses,
20+ Dictionary<string, IEnumerable<UmaRaceInfo>> races,
2121 Dictionary<string, IEnumerable<ChakudosuuSummary>> summaries)
2222 {
2323
--- a/App/Domain/UseCase/Interactor/AsyncLoadManualUmaListInteractor.cs
+++ b/App/Domain/UseCase/Interactor/AsyncLoadManualUmaListInteractor.cs
@@ -65,7 +65,7 @@ namespace UmaTest.App.Domain.UseCase.Interactor
6565
6666 statusBarProxy.SetStatusText("馬に紐付くレース情報を読み込んでいます...");
6767
68- Dictionary<string, IEnumerable<NUmaRaceInfo>> races = await logicUmaRace.LoadRacesByKettoNumListAsync(kettoNums);
68+ Dictionary<string, IEnumerable<UmaRaceInfo>> races = await logicUmaRace.LoadRacesByKettoNumListAsync(kettoNums);
6969
7070 statusBarProxy.SetStatusText("馬に紐付く着度数情報を読み込んでいます...");
7171
--- a/App/Domain/UseCase/Interactor/AsyncLoadSelectedRaceUmaListInteractor.cs
+++ b/App/Domain/UseCase/Interactor/AsyncLoadSelectedRaceUmaListInteractor.cs
@@ -35,13 +35,13 @@ namespace UmaTest.App.Domain.UseCase.Interactor
3535
3636 statusBarProxy.SetStatusText("馬情報を読み込んでいます...");
3737
38- IEnumerable<NUmaRace> horses = await logicUmaRace.LoadHorsesBySelectedRaceAsync(req.Race);
38+ IEnumerable<UmaInfo> horses = await logicUmaRace.LoadHorsesBySelectedRaceAsync(req.Race);
3939
4040 List<string> kettoNums = horses.Select(h => h.Kettonum).ToList();
4141
4242 statusBarProxy.SetStatusText("馬に紐付くレース情報を読み込んでいます...");
4343
44- Dictionary<string, IEnumerable<NUmaRaceInfo>> races = await logicUmaRace.LoadRacesByKettoNumListAsync(kettoNums);
44+ Dictionary<string, IEnumerable<UmaRaceInfo>> races = await logicUmaRace.LoadRacesByKettoNumListAsync(kettoNums);
4545
4646 statusBarProxy.SetStatusText("馬に紐付く着度数情報を読み込んでいます...");
4747
--- a/App/Domain/UseCase/Interactor/AsyncLoadTokuUmaListInteractor.cs
+++ b/App/Domain/UseCase/Interactor/AsyncLoadTokuUmaListInteractor.cs
@@ -37,13 +37,13 @@ namespace UmaTest.App.Domain.UseCase.Interactor
3737
3838 statusBarProxy.SetStatusText("馬情報を読み込んでいます...");
3939
40- Dictionary<string, NToku> horses = await logicTokuUma.LoadHorsesByTokuRaceAsync(req.Race);
40+ Dictionary<string, TokuUmaInfo> horses = await logicTokuUma.LoadHorsesByTokuRaceAsync(req.Race);
4141
4242 List<string> kettoNums = horses.Select(h => h.Value.Kettonum).OrderBy(k => k).ToList();
4343
4444 statusBarProxy.SetStatusText("馬に紐付くレース情報を読み込んでいます...");
4545
46- Dictionary<string, IEnumerable<NUmaRaceInfo>> races = await logicUmaRace.LoadRacesByKettoNumListAsync(kettoNums);
46+ Dictionary<string, IEnumerable<UmaRaceInfo>> races = await logicUmaRace.LoadRacesByKettoNumListAsync(kettoNums);
4747
4848 statusBarProxy.SetStatusText("馬に紐付く着度数情報を読み込んでいます...");
4949
--- a/App/Domain/UseCase/Interactor/LoadManualUmaListInteractor.cs
+++ b/App/Domain/UseCase/Interactor/LoadManualUmaListInteractor.cs
@@ -41,7 +41,7 @@ namespace UmaTest.App.Domain.UseCase.Interactor
4141
4242 List<string> kettoNums = horses.Select(h => h.Value.Kettonum).OrderBy(k => k).ToList();
4343
44- Dictionary<string, IEnumerable<NUmaRaceInfo>> races = logicUmaRace.LoadRacesByKettoNumList(kettoNums);
44+ Dictionary<string, IEnumerable<UmaRaceInfo>> races = logicUmaRace.LoadRacesByKettoNumList(kettoNums);
4545 Dictionary<string, IEnumerable<ChakudosuuSummary>> summaries = logicUmaRace.LoadChakudosuuSummaries(kettoNums);
4646
4747 return translator.Translate(res, req, kettoNums, horses, races, summaries);
--- a/App/Domain/UseCase/Response/AsyncLoadSelectedRaceUmaListResponse.cs
+++ b/App/Domain/UseCase/Response/AsyncLoadSelectedRaceUmaListResponse.cs
@@ -17,8 +17,8 @@ namespace UmaTest.App.Domain.UseCase.Response
1717 }
1818
1919 public List<string> KettoNums { get; set; }
20- public IEnumerable<NUmaRace> Horses { get; set; }
21- public Dictionary<string, IEnumerable<NUmaRaceInfo>> Races { get; set; }
20+ public IEnumerable<UmaInfo> Horses { get; set; }
21+ public Dictionary<string, IEnumerable<UmaRaceInfo>> Races { get; set; }
2222 public Dictionary<string, IEnumerable<ChakudosuuSummary>> Summaries { get; set; }
2323 }
2424 }
--- a/App/Domain/UseCase/Response/AsyncLoadTokuUmaListResponse.cs
+++ b/App/Domain/UseCase/Response/AsyncLoadTokuUmaListResponse.cs
@@ -17,8 +17,8 @@ namespace UmaTest.App.Domain.UseCase.Response
1717 }
1818
1919 public List<string> KettoNums { get; set; }
20- public Dictionary<string, NToku> Horses { get; set; }
21- public Dictionary<string, IEnumerable<NUmaRaceInfo>> Races { get; set; }
20+ public Dictionary<string, TokuUmaInfo> Horses { get; set; }
21+ public Dictionary<string, IEnumerable<UmaRaceInfo>> Races { get; set; }
2222 public Dictionary<string, IEnumerable<ChakudosuuSummary>> Summaries { get; set; }
2323 }
2424 }
--- a/App/Domain/UseCase/Response/LoadManualUmaListResponse.cs
+++ b/App/Domain/UseCase/Response/LoadManualUmaListResponse.cs
@@ -17,7 +17,7 @@ namespace UmaTest.App.Domain.UseCase.Response
1717
1818 public List<string> KettoNums { get; set; }
1919 public Dictionary<string, NUma> Horses { get; set; }
20- public Dictionary<string, IEnumerable<NUmaRaceInfo>> Races { get; set; }
20+ public Dictionary<string, IEnumerable<UmaRaceInfo>> Races { get; set; }
2121 public Dictionary<string, IEnumerable<ChakudosuuSummary>> Summaries { get; set; }
2222 }
2323 }
--- a/App/Presentation/View/MainWindow.Designer.cs
+++ b/App/Presentation/View/MainWindow.Designer.cs
@@ -247,11 +247,12 @@ namespace UmaTest.App.Presentation.View
247247 //
248248 this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
249249 this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
250- this.BackColor = System.Drawing.SystemColors.Window;
250+ this.BackColor = System.Drawing.SystemColors.Control;
251251 this.ClientSize = new System.Drawing.Size(862, 517);
252252 this.Controls.Add(this.splitContainer1);
253253 this.Controls.Add(this.statusStrip1);
254254 this.Controls.Add(this.menuStrip1);
255+ this.DoubleBuffered = true;
255256 this.MainMenuStrip = this.menuStrip1;
256257 this.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
257258 this.Name = "MainWindow";
--- a/App/Presentation/View/MainWindow.cs
+++ b/App/Presentation/View/MainWindow.cs
@@ -126,27 +126,29 @@ namespace UmaTest.App.Presentation.View
126126 },
127127 new DataGridViewTextBoxColumn
128128 {
129- DataPropertyName = "ChichiBamei",
129+ //DataPropertyName = "ChichiBamei",
130+ DataPropertyName = "Konso.Chichi.Bamei",
130131 Name = "父",
131132 },
132133 new DataGridViewTextBoxColumn
133134 {
134- DataPropertyName = "HahaChichiBamei",
135+ //DataPropertyName = "HahaChichiBamei",
136+ DataPropertyName = "Konso.HahaChichi.Bamei",
135137 Name = "母父",
136138 },
137139 new DataGridViewTextBoxColumn
138140 {
139- DataPropertyName = "BataijyuFormatted",
141+ DataPropertyName = "Konso.BataijyuFormatted",
140142 Name = "馬体重",
141143 },
142144 new DataGridViewTextBoxColumn
143145 {
144- DataPropertyName = "KonsoTanOdds",
146+ DataPropertyName = "Konso.OddsTanpuku.TanOddsFormatted",
145147 Name = "オッズ",
146148 },
147149 new DataGridViewTextBoxColumn
148150 {
149- DataPropertyName = "KonsoNinki",
151+ DataPropertyName = "Konso.Ninki",
150152 Name = "人気",
151153 },
152154 new DataGridViewTextBoxColumn
@@ -309,29 +311,29 @@ namespace UmaTest.App.Presentation.View
309311 },
310312 new DataGridViewTextBoxColumn
311313 {
314+ DataPropertyName = "Kimete",
315+ Name = "決手",
316+ },
317+ new DataGridViewTextBoxColumn
318+ {
312319 DataPropertyName = "Kisyuryakusyo",
313320 Name = "騎手",
314321 },
315322 new DataGridViewTextBoxColumn
316323 {
317- DataPropertyName = "Futan",
324+ DataPropertyName = "FutanFormatted",
318325 Name = "負担",
319326 },
320327 new DataGridViewTextBoxColumn
321328 {
322- DataPropertyName = "Bataijyu",
329+ DataPropertyName = "BataijyuFormatted",
323330 Name = "馬体重",
324331 },
325332 new DataGridViewTextBoxColumn
326333 {
327- DataPropertyName = "Time",
334+ DataPropertyName = "TimeFormatted",
328335 Name = "タイム",
329336 },
330- new DataGridViewTextBoxColumn
331- {
332- DataPropertyName = "Kimete",
333- Name = "決手",
334- },
335337 };
336338
337339 grid2Cols.Do(col => col.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter);
@@ -342,21 +344,51 @@ namespace UmaTest.App.Presentation.View
342344 // Custom Type Descriptor for Child Entity Properties
343345 //
344346
347+ // 馬レース情報.レース情報
348+ TypeDescriptor.AddProvider(
349+ new NestedTypeDescriptionProvider<NRace>(TypeDescriptor.GetProvider(typeof(UmaRaceInfo))),
350+ typeof(UmaRaceInfo)
351+ );
352+
353+ // 馬レース情報.騎手情報
354+ TypeDescriptor.AddProvider(
355+ new NestedTypeDescriptionProvider<NKisyu>(TypeDescriptor.GetProvider(typeof(UmaRaceInfo))),
356+ typeof(UmaRaceInfo)
357+ );
358+
359+ // 馬レース情報.調教師情報
360+ TypeDescriptor.AddProvider(
361+ new NestedTypeDescriptionProvider<NChokyo>(TypeDescriptor.GetProvider(typeof(UmaRaceInfo))),
362+ typeof(UmaRaceInfo)
363+ );
364+
365+ // 馬レース情報.オッズ単複情報
366+ TypeDescriptor.AddProvider(
367+ new NestedTypeDescriptionProvider<OddsInfo>(TypeDescriptor.GetProvider(typeof(UmaRaceInfo))),
368+ typeof(UmaRaceInfo)
369+ );
370+
371+ // 馬サマリ行.着度数
345372 TypeDescriptor.AddProvider(
346373 new NestedTypeDescriptionProvider<ChakudosuuByGradeRowDto>(TypeDescriptor.GetProvider(typeof(UmaSummaryRowDto))),
347374 typeof(UmaSummaryRowDto)
348375 );
376+
377+ // 馬サマリ表.馬毎レース行
378+ TypeDescriptionProvider nestedUmaRaceRowDtoProvider =
379+ new NestedTypeDescriptionProvider<UmaRaceRowDto>(TypeDescriptor.GetProvider(typeof(UmaSummaryRowDto)));
380+
349381 TypeDescriptor.AddProvider(
350- new NestedTypeDescriptionProvider<UmaRaceRowDto>(TypeDescriptor.GetProvider(typeof(UmaSummaryRowDto))),
351- typeof(UmaSummaryRowDto)
382+ nestedUmaRaceRowDtoProvider, typeof(UmaSummaryRowDto)
352383 );
384+
385+ // 馬サマリ行.馬毎レース行.繁殖馬情報
353386 TypeDescriptor.AddProvider(
354- new NestedTypeDescriptionProvider<NRace>(TypeDescriptor.GetProvider(typeof(NUmaRaceInfo))),
355- typeof(NUmaRaceInfo)
387+ new NestedTypeDescriptionProvider<NHansyoku>(nestedUmaRaceRowDtoProvider), typeof(UmaSummaryRowDto)
356388 );
357389
358390 //
359- // Enable Double Buffering for too slow repaint problem on data grid view
391+ // Enable Double Buffering for repainting too slow problem on data grid view
360392 //
361393
362394 EnableDoubleBuffering(dataGridView1);
--- a/Infra/Adaptor/Controller/Handler/AsyncUseCaseRouter.cs
+++ b/Infra/Adaptor/Controller/Handler/AsyncUseCaseRouter.cs
@@ -31,7 +31,7 @@ namespace UmaTest.Infra.Adaptor.Controller.Handler
3131 return null;
3232 }
3333
34- Logger.Trace($"asyncInteractor={asyncInteractor.ToString()}");
34+ Logger.Trace($"async interactor={asyncInteractor.ToString()}");
3535
3636 UseCaseResponse res = await asyncInteractor.InteractAsync(req);
3737
@@ -43,7 +43,7 @@ namespace UmaTest.Infra.Adaptor.Controller.Handler
4343
4444 if (presenter != null)
4545 {
46- Logger.Trace($"asyncPresenter={presenter.ToString()}");
46+ Logger.Trace($"async presenter={presenter.ToString()}");
4747
4848 return await presenter.HandleAsync(res);
4949 }
--- a/Infra/Adaptor/ViewModel/PropertyChangedEventHandlerExtensions.cs
+++ b/Infra/Adaptor/ViewModel/PropertyChangedEventHandlerExtensions.cs
@@ -4,7 +4,7 @@ using System.ComponentModel;
44 using System.Linq.Expressions;
55 using UmaTest.Infra.Log;
66
7-namespace UmaTest.App.Adaptor.Gateway.ViewModel
7+namespace UmaTest.Infra.Adaptor.ViewModel
88 {
99
1010 /// <summary>
--- a/Infra/Helper/BeanHelper.cs
+++ b/Infra/Helper/BeanHelper.cs
@@ -1,4 +1,5 @@
11 using System;
2+using System.Collections.Concurrent;
23 using System.Collections.Generic;
34 using System.Linq;
45 using System.Linq.Expressions;
@@ -10,56 +11,104 @@ namespace UmaTest.Infra.Helper
1011 {
1112 internal class BeanHelper
1213 {
13- internal static T CreateAndCopy<T>(Type toType, Object from)
14+ private static readonly ConcurrentDictionary<Type, Dictionary<string, PropertyInfo>> gettersOnlyBeanPropInfos
15+ = new ConcurrentDictionary<Type, Dictionary<string, PropertyInfo>>();
16+
17+ private static readonly ConcurrentDictionary<Type, Dictionary<string, PropertyInfo>> beanPropInfos
18+ = new ConcurrentDictionary<Type, Dictionary<string, PropertyInfo>>();
19+
20+ internal static T CreateAndCopy<T>(Type toType, Object from)
1421 {
1522 T to = (T)toType.GetConstructor(Type.EmptyTypes).Invoke(null);
1623 Copy(to, from);
1724 return to;
1825 }
1926
20- internal static T Copy<T>(T to, Object from)
27+ internal static T Copy<T>(T to, Object from, Boolean merge = false)
2128 {
22- //それぞれのタイプを取得
23- Type fromType = from.GetType();
24- Type toType = to.GetType();
25-
26- //メンバーリスト
27- MemberInfo[] fromMembers = fromType.GetMembers(BindingFlags.Public | BindingFlags.Instance);
28- MemberInfo[] toMembers = toType.GetMembers(BindingFlags.Public | BindingFlags.Instance);
29- //名称用のリストを用意
30- List<string> nameList = new List<string>();
31- foreach (MemberInfo m in toMembers)
32- {
33- //プロパティの場合のみ
34- if (m.MemberType == MemberTypes.Property)
35- {
36- PropertyInfo info = toType.GetProperty(m.Name);
37- MethodInfo getter = info.GetSetMethod();
38- MethodInfo setter = info.GetSetMethod();
39- if (getter != null && setter != null)
29+ Dictionary<string, PropertyInfo> fromProperties = ExtractProperties(from.GetType(), true);
30+ Dictionary<string, PropertyInfo> toProperties = ExtractProperties(to.GetType());
31+
32+ foreach (string name in fromProperties.Keys)
33+ {
34+ if (toProperties.ContainsKey(name))
35+ {
36+ PropertyInfo toProperty = toProperties[name];
37+ PropertyInfo fromProperty = fromProperties[name];
38+
39+ object fromValue = fromProperty.GetValue(from, null);
40+
41+ if (merge)
4042 {
41- nameList.Add(m.Name);
42- }
43- }
44- }
45-
46- //同名プロパティの値をコピー
47- foreach (MemberInfo m in fromMembers)
48- {
49- if (m.MemberType == MemberTypes.Property)
50- {
51- //同名のプパティがあれば転送する
52- if (nameList.Contains(m.Name))
53- {
54- toType.GetProperty(m.Name).SetValue(to, fromType.GetProperty(m.Name).GetValue(from, null));
55- }
56- }
57- }
43+ object toValue = toProperty.GetValue(to, null);
44+ if ((toValue != null) || (fromValue == null))
45+ {
46+ continue;
47+ }
48+ }
5849
59- return to;
60- }
50+ if (toProperty.PropertyType.IsAssignableFrom(fromValue.GetType()))
51+ {
52+ toProperty.SetValue(to, fromValue);
53+ }
54+ else
55+ {
56+ throw new ArgumentException($"]{toProperty.PropertyType} {to.GetType()}.{name}] is not assignable from [{fromProperty.PropertyType} {from.GetType()}.{name}]");
57+ }
58+ }
59+ }
60+
61+ return to;
62+ }
63+
64+ internal static Dictionary<string, PropertyInfo> ExtractProperties(Type type, Boolean allowGetterOnly = false)
65+ {
66+ if (allowGetterOnly)
67+ {
68+ if (gettersOnlyBeanPropInfos.ContainsKey(type))
69+ {
70+ return gettersOnlyBeanPropInfos[type];
71+ }
72+ }
73+ else
74+ {
75+ if (beanPropInfos.ContainsKey(type))
76+ {
77+ return beanPropInfos[type];
78+ }
79+ }
80+
81+ MemberInfo[] members = type.GetMembers(BindingFlags.Public | BindingFlags.Instance);
82+
83+ Dictionary<string, PropertyInfo> res = new Dictionary<string, PropertyInfo>();
84+
85+ foreach (MemberInfo m in members)
86+ {
87+ if (m.MemberType == MemberTypes.Property)
88+ {
89+ PropertyInfo info = type.GetProperty(m.Name);
90+ MethodInfo getter = info.GetSetMethod();
91+ MethodInfo setter = info.GetSetMethod();
92+ if (getter != null && (allowGetterOnly || (setter != null)) )
93+ {
94+ res.Add(m.Name, info);
95+ }
96+ }
97+ }
98+
99+ if (allowGetterOnly)
100+ {
101+ gettersOnlyBeanPropInfos.TryAdd(type, res);
102+ }
103+ else
104+ {
105+ beanPropInfos.TryAdd(type, res);
106+ }
107+
108+ return res;
109+ }
61110
62- public static string GetPropertyName<TResult>(Expression<Func<TResult>> propertyName)
111+ public static string GetPropertyName<TResult>(Expression<Func<TResult>> propertyName)
63112 {
64113 if (!(propertyName.Body is MemberExpression memberEx))
65114 throw new ArgumentException();
--- a/UmaTest.csproj
+++ b/UmaTest.csproj
@@ -102,6 +102,9 @@
102102 <Reference Include="System.Xml" />
103103 </ItemGroup>
104104 <ItemGroup>
105+ <Compile Include="App\Domain\Model\Repository\Database\Dto\OddsInfo.cs" />
106+ <Compile Include="App\Domain\Model\Repository\Database\Dto\TokuUmaInfo.cs" />
107+ <Compile Include="App\Domain\Model\Repository\Database\Dto\UmaInfo.cs" />
105108 <Compile Include="Infra\Adaptor\Controller\EventObserver.cs" />
106109 <Compile Include="App\Adaptor\Gateway\UI\IManualHorseListProxy.cs" />
107110 <Compile Include="App\Adaptor\Gateway\UI\ISearchRaceViewProxy.cs" />
@@ -232,7 +235,7 @@
232235 <Compile Include="Infra\Domain\DaoException.cs" />
233236 <Compile Include="App\Domain\Model\Repository\Database\Dao\NUmaRaceDao.cs" />
234237 <Compile Include="App\Domain\Model\Repository\Database\Dto\ChakudosuuSummary.cs" />
235- <Compile Include="App\Domain\Model\Repository\Database\Dto\NUmaRaceInfo.cs" />
238+ <Compile Include="App\Domain\Model\Repository\Database\Dto\UmaRaceInfo.cs" />
236239 <Compile Include="App\Domain\Model\Repository\Database\Entity\EveryDB2.cs" />
237240 <Compile Include="Infra\Adaptor\Gateway\UI\DlgInfo.cs" />
238241 <Compile Include="Infra\Adaptor\Gateway\UI\IUserDialogProxy.cs" />