• R/O
  • HTTP
  • SSH
  • HTTPS

提交

標籤
無標籤

Frequently used words (click to add to your profile)

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

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


Commit MetaInfo

修訂0579d8dbb27d5259826fcdea6db1c3765ef9a53b (tree)
時間2021-06-06 23:53:44
作者yoshy <yoshy@user...>
Commiteryoshy

Log Message

temp_20210606_2352

Change Summary

差異

--- /dev/null
+++ b/App/Adaptor/Gateway/ViewModel/Dto/RaceInfo.cs
@@ -0,0 +1,18 @@
1+using System;
2+using System.Collections.Generic;
3+using System.Linq;
4+using System.Text;
5+using System.Threading.Tasks;
6+using UmaTest.App.Domain.Model.Repository.Database.Entity.EveryDB2;
7+using UmaTest.Infra.Helper;
8+
9+namespace UmaTest.App.Adaptor.Gateway.ViewModel.Dto
10+{
11+ public class RaceInfo : NRace
12+ {
13+ public RaceInfo(NRace race)
14+ {
15+ BeanHelper.Copy(this, race);
16+ }
17+ }
18+}
--- a/App/Adaptor/Gateway/ViewModel/Dto/TokuRaceRowDto.cs
+++ b/App/Adaptor/Gateway/ViewModel/Dto/TokuRaceRowDto.cs
@@ -33,5 +33,10 @@ namespace UmaTest.App.Adaptor.Gateway.ViewModel.Dto
3333 public string CourseName => CodeHelper.GetInstance().GetTurfDurtName(Trackcd, "不明") + Kyori;
3434
3535 public string TosuFormatted => FormatHelper.FormatTosu(this);
36+
37+ public NRace ToNRace()
38+ {
39+ return BeanHelper.CreateAndCopy<NRace>(this);
40+ }
3641 }
3742 }
--- a/App/Adaptor/Gateway/ViewModel/IMainWindowViewModel.cs
+++ b/App/Adaptor/Gateway/ViewModel/IMainWindowViewModel.cs
@@ -3,6 +3,7 @@ using System.Collections.Generic;
33 using System.ComponentModel;
44 using UmaTest.App.Adaptor.Gateway.UI;
55 using UmaTest.App.Adaptor.Gateway.ViewModel.Dto;
6+using UmaTest.App.Domain.Model.Repository.Database.Entity.EveryDB2;
67 using UmaTest.Infra.Adaptor.Command;
78 using UmaTest.Infra.Adaptor.Controller;
89
@@ -16,7 +17,7 @@ namespace UmaTest.App.Adaptor.Gateway.ViewModel
1617 ICommand CommandSearchRace { get; }
1718 EventHandler EventSelectedHorseChanged { get; }
1819 IManualHorseListProxy ManualHorseListProxy { get; }
19- BindingList<UmaRaceRowDto> RaceList { get; set; }
20+ BindingList<UmaRaceRowDto> UmaRaceList { get; set; }
2021 ISearchRaceViewProxy SearchRaceViewProxy { get; }
2122 ITokuRaceListProxy TokuRaceListProxy { get; }
2223 BindingList<UmaSummaryRowDto> UmaSummaryList { get; set; }
@@ -25,5 +26,6 @@ namespace UmaTest.App.Adaptor.Gateway.ViewModel
2526 event PropertyChangedEventHandler PropertyChanged;
2627
2728 void RefreshModel(IList<UmaSummaryRowDto> umaSummaryList, IDictionary<string, IList<UmaRaceRowDto>> umaRaceMap);
29+ void RefreshModel(NRace race, IList<UmaSummaryRowDto> umaSummaryList, IDictionary<string, IList<UmaRaceRowDto>> umaRaceMap);
2830 }
2931 }
\ No newline at end of file
--- a/App/Adaptor/Gateway/ViewModel/MainWindowViewModel.cs
+++ b/App/Adaptor/Gateway/ViewModel/MainWindowViewModel.cs
@@ -17,6 +17,7 @@ using UmaTest.App.Adaptor.Controller;
1717 using UmaTest.App.Adaptor.Gateway.UI;
1818 using UmaTest.Infra.Adaptor.ViewModel;
1919 using System.Collections.ObjectModel;
20+using UmaTest.App.Domain.Model.Repository.Database.Entity.EveryDB2;
2021
2122 namespace UmaTest.App.Adaptor.Gateway.ViewModel
2223 {
@@ -72,6 +73,14 @@ namespace UmaTest.App.Adaptor.Gateway.ViewModel
7273 set => PropertyChanged.RaiseIfSet(() => Caption, ref _caption, value);
7374 }
7475
76+ private RaceInfo _race;
77+
78+ public RaceInfo Race
79+ {
80+ get => _race;
81+ set => PropertyChanged.RaiseIfSet(() => Race, ref _race, value);
82+ }
83+
7584 private BindingList<UmaSummaryRowDto> _umaSummaryList = new BindingList<UmaSummaryRowDto>();
7685
7786 public BindingList<UmaSummaryRowDto> UmaSummaryList
@@ -80,16 +89,26 @@ namespace UmaTest.App.Adaptor.Gateway.ViewModel
8089 set => PropertyChanged.RaiseIfSet(() => UmaSummaryList, ref _umaSummaryList, value);
8190 }
8291
83- private BindingList<UmaRaceRowDto> _raceList = new BindingList<UmaRaceRowDto>();
92+ private BindingList<UmaRaceRowDto> _umaRaceList = new BindingList<UmaRaceRowDto>();
8493
85- public BindingList<UmaRaceRowDto> RaceList
94+ public BindingList<UmaRaceRowDto> UmaRaceList
8695 {
87- get => _raceList;
88- set => PropertyChanged.RaiseIfSet(() => RaceList, ref _raceList, value);
96+ get => _umaRaceList;
97+ set => PropertyChanged.RaiseIfSet(() => UmaRaceList, ref _umaRaceList, value);
8998 }
9099
91100 public void RefreshModel(IList<UmaSummaryRowDto> umaSummaryList, IDictionary<string, IList<UmaRaceRowDto>> umaRaceMap)
92101 {
102+ RefreshModel(null, umaSummaryList, umaRaceMap);
103+ }
104+
105+ public void RefreshModel(NRace race, IList<UmaSummaryRowDto> umaSummaryList, IDictionary<string, IList<UmaRaceRowDto>> umaRaceMap)
106+ {
107+ if (race != null)
108+ {
109+ Race = new RaceInfo(race);
110+ }
111+
93112 _umaRaceMap = new ReadOnlyDictionary<string, IList<UmaRaceRowDto>>(umaRaceMap);
94113
95114 UmaSummaryList = new BindingList<UmaSummaryRowDto>(umaSummaryList);
@@ -138,7 +157,7 @@ namespace UmaTest.App.Adaptor.Gateway.ViewModel
138157 {
139158 if (_umaRaceMap.TryGetValue(_umaSummaryList[index].Kettonum, out IList<UmaRaceRowDto> umaRaceList))
140159 {
141- RaceList = new BindingList<UmaRaceRowDto>(umaRaceList);
160+ UmaRaceList = new BindingList<UmaRaceRowDto>(umaRaceList);
142161 }
143162 }
144163 }
--- a/App/Adaptor/Presenter/AsyncLoadSelectedRaceUmaListPresenter.cs
+++ b/App/Adaptor/Presenter/AsyncLoadSelectedRaceUmaListPresenter.cs
@@ -67,8 +67,9 @@ namespace UmaTest.App.Gateway.Presenter
6767 task =>
6868 {
6969 SearchRaceRowDto race = req.Race;
70- vm.Caption = $"レース検索結果:[ {race.YearMonthDay} {race.JyoName}{int.Parse(race.Racenum)}R {race.RaceName} ({race.CourseName}m) ]";
71- vm.RefreshModel(umaSummaryList, umaRaceMap);
70+ string dataKbn = CodeHelper.GetInstance().GetName(CodeHelper.RACE_DATA_KUBUN, race.Datakubun, "不明");
71+ vm.Caption = $"レース検索結果:[ {race.YearMonthDay} {race.JyoName}{int.Parse(race.Racenum)}R {race.RaceName} ({race.CourseName}m) ] - {dataKbn}";
72+ vm.RefreshModel(race, umaSummaryList, umaRaceMap);
7273 });
7374 }
7475 }
--- a/App/Adaptor/Presenter/AsyncLoadTokuUmaListPresenter.cs
+++ b/App/Adaptor/Presenter/AsyncLoadTokuUmaListPresenter.cs
@@ -65,7 +65,7 @@ namespace UmaTest.App.Gateway.Presenter
6565 {
6666 TokuRaceRowDto race = req.Race;
6767 vm.Caption = $"特別登録:[ {race.YearMonthDay} {race.JyoName}{int.Parse(race.Racenum)}R {race.RaceName} ({race.CourseName}m) ]";
68- vm.RefreshModel(umaSummaryList, umaRaceMap);
68+ vm.RefreshModel(race.ToNRace(), umaSummaryList, umaRaceMap);
6969 });
7070 }
7171 }
--- a/App/Domain/Model/Repository/Database/Dao/NRaceDao.cs
+++ b/App/Domain/Model/Repository/Database/Dao/NRaceDao.cs
@@ -26,7 +26,7 @@ namespace UmaTest.App.Domain.Model.Repository.Database.Dao
2626 return DbHelper.tryQuery(() =>
2727 {
2828 var sql = Sql.Builder
29- .Where("year || monthday > to_char(current_date - 7, 'YYYYMMDD')")
29+ .Where("year || monthday > to_char(current_date - 28, 'YYYYMMDD')")
3030 .OrderBy("year desc, monthday desc, jyocd, kaiji, nichiji, racenum");
3131
3232 return db.Query<NRace>(sql);
--- a/App/Presentation/View/MainWindow.cs
+++ b/App/Presentation/View/MainWindow.cs
@@ -55,7 +55,9 @@ namespace UmaTest.App.Presentation.View
5555 InitializeDataGridView(vm);
5656
5757 this.vm = vm;
58+
5859 isFormInitialized = true;
60+
5961 this.ResizeBegin += new System.EventHandler(this.MainWindow_ResizeBegin);
6062 this.ResizeEnd += new System.EventHandler(this.MainWindow_ResizeEnd);
6163 }
@@ -486,6 +488,8 @@ namespace UmaTest.App.Presentation.View
486488 //dataGridView1.Columns["馬体重"].HeaderCell.Style.WrapMode = DataGridViewTriState.False;
487489 //dataGridView1.Columns["オッズ"].HeaderCell.Style.WrapMode = DataGridViewTriState.False;
488490
491+ dataGridView1.Columns["馬名"].Frozen = true;
492+
489493 dataGridView1.Columns["枠番"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
490494 dataGridView1.Columns["馬番"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
491495 dataGridView1.Columns["戦数"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
@@ -520,7 +524,7 @@ namespace UmaTest.App.Presentation.View
520524 // Initialize DataGridView2
521525 //
522526
523- bindingSource2.DataSource = vm.RaceList;
527+ bindingSource2.DataSource = vm.UmaRaceList;
524528
525529 dataGridView2.AutoGenerateColumns = false;
526530 dataGridView2.AutoSize = true;
@@ -817,10 +821,10 @@ namespace UmaTest.App.Presentation.View
817821 }
818822 break;
819823
820- case "RaceList":
824+ case "UmaRaceList":
821825 {
822- bindingSource2.DataSource = vm.RaceList;
823- DataGridViewHelper.AdjustDataGridView(dataGridView2, bindingSource2, vm.RaceList.Count, splitContainer2.Panel2);
826+ bindingSource2.DataSource = vm.UmaRaceList;
827+ DataGridViewHelper.AdjustDataGridView(dataGridView2, bindingSource2, vm.UmaRaceList.Count, splitContainer2.Panel2);
824828
825829 ColorizeUmaRaceListView();
826830 }
@@ -917,109 +921,186 @@ namespace UmaTest.App.Presentation.View
917921
918922 private void ColorizePCI(DataGridViewCell cellPCI, DataGridViewCell cellJyuni)
919923 {
920- if (int.TryParse(cellJyuni.Value.ToString(), out int jyuni) && (jyuni > 6))
924+ if ( (cellPCI?.Value == null) || (cellJyuni?.Value == null) )
921925 {
922- ChangeCellBackColor(cellPCI, Color.Silver);
923926 return;
924927 }
925928
929+ bool isWarningOnly = false;
930+
931+ if (int.TryParse(cellJyuni.Value.ToString(), out int jyuni) && (jyuni > 6))
932+ {
933+ isWarningOnly = true;
934+ }
935+
926936 if (decimal.TryParse(cellPCI.Value.ToString(), out decimal pci))
927937 {
938+ Color backColor = SystemColors.Window;
939+
928940 if (pci >= 115)
929941 {
930- ChangeCellBackColor(cellPCI, Color.Yellow);
942+ backColor = Color.Yellow;
931943 }
932944 else if (pci >= 105)
933945 {
934- ChangeCellBackColor(cellPCI, Color.Cyan);
946+ backColor = Color.Cyan;
935947 }
936948 else if (pci >= 95)
937949 {
938- ChangeCellBackColor(cellPCI, Color.LightGreen);
950+ backColor = Color.LightGreen;
939951 }
940952 else if (pci >= 85)
941953 {
942- ChangeCellBackColor(cellPCI, Color.LightSkyBlue);
954+ backColor = Color.LightSkyBlue;
943955 }
944956 else if (pci <= 75)
945957 {
946- ChangeCellBackColor(cellPCI, Color.Orange);
958+ backColor = Color.Orange;
959+ }
960+
961+ if (!isWarningOnly)
962+ {
963+ ChangeCellBackColor(cellPCI, backColor);
964+ }
965+ else
966+ {
967+ if (backColor == Color.Orange)
968+ {
969+ ChangeCellBackColor(cellPCI, Color.Sienna);
970+ }
971+ else
972+ {
973+ ChangeCellBackColor(cellPCI, Color.Silver);
974+ }
947975 }
948976 }
949977 }
950978
951979 private void ColorizeAvgHaronTimeMinus3(DataGridViewCell cellAvgHaronTimeMinus3, DataGridViewCell cellJyuni)
952980 {
953- if (int.TryParse(cellJyuni.Value.ToString(), out int jyuni) && (jyuni > 6))
981+ if ((cellAvgHaronTimeMinus3?.Value == null) || (cellJyuni?.Value == null))
954982 {
955- ChangeCellBackColor(cellAvgHaronTimeMinus3, Color.Silver);
956983 return;
957984 }
958985
986+ bool isWarningOnly = false;
987+
988+ if (int.TryParse(cellJyuni.Value.ToString(), out int jyuni) && (jyuni > 6))
989+ {
990+ isWarningOnly = true;
991+ }
992+
959993 if (decimal.TryParse(cellAvgHaronTimeMinus3.Value.ToString(), out decimal pci))
960994 {
995+ Color backColor = SystemColors.Window;
996+
961997 if (pci >= 125)
962998 {
963- ChangeCellBackColor(cellAvgHaronTimeMinus3, Color.Orange);
999+ backColor = Color.Orange;
9641000 }
9651001 else if (pci >= 115)
9661002 {
967- ChangeCellBackColor(cellAvgHaronTimeMinus3, Color.Yellow);
1003+ backColor = Color.Yellow;
9681004 }
9691005 else if (pci >= 105)
9701006 {
971- ChangeCellBackColor(cellAvgHaronTimeMinus3, Color.Cyan);
1007+ backColor = Color.Cyan;
9721008 }
9731009 else if (pci >= 95)
9741010 {
975- ChangeCellBackColor(cellAvgHaronTimeMinus3, Color.LightGreen);
1011+ backColor = Color.LightGreen;
9761012 }
9771013 else if (pci >= 85)
9781014 {
979- ChangeCellBackColor(cellAvgHaronTimeMinus3, Color.LightSkyBlue);
1015+ backColor = Color.LightSkyBlue;
9801016 }
9811017 else if (pci < 85)
9821018 {
983- ChangeCellBackColor(cellAvgHaronTimeMinus3, Color.Orange);
1019+ backColor = Color.Orange;
1020+ }
1021+
1022+ if (!isWarningOnly)
1023+ {
1024+ ChangeCellBackColor(cellAvgHaronTimeMinus3, backColor);
1025+ }
1026+ else
1027+ {
1028+ if (backColor == Color.Orange)
1029+ {
1030+ ChangeCellBackColor(cellAvgHaronTimeMinus3, Color.Sienna);
1031+ }
1032+ else
1033+ {
1034+ ChangeCellBackColor(cellAvgHaronTimeMinus3, Color.Silver);
1035+ }
9841036 }
9851037 }
9861038 }
9871039
9881040 private void ColorizeHaronTimeL3(DataGridViewCell cellHaronTimeL3, DataGridViewCell cellJyuni)
9891041 {
990- if (int.TryParse(cellJyuni.Value.ToString(), out int jyuni) && (jyuni > 6))
1042+ if ((cellHaronTimeL3?.Value == null) || (cellJyuni?.Value == null))
9911043 {
992- ChangeCellBackColor(cellHaronTimeL3, Color.Silver);
9931044 return;
9941045 }
9951046
1047+ bool isWarningOnly = false;
1048+
1049+ if (int.TryParse(cellJyuni.Value.ToString(), out int jyuni) && (jyuni > 6))
1050+ {
1051+ isWarningOnly = true;
1052+ }
1053+
9961054 if (decimal.TryParse(cellHaronTimeL3.Value.ToString(), out decimal pci))
9971055 {
998- if (pci >= 140)
1056+ Color backColor = SystemColors.Window;
1057+
1058+ if (pci >= 140)
9991059 {
1000- ChangeCellBackColor(cellHaronTimeL3, Color.Yellow);
1060+ backColor = Color.Yellow;
10011061 }
10021062 else if (pci >= 120)
10031063 {
1004- ChangeCellBackColor(cellHaronTimeL3, Color.Cyan);
1064+ backColor = Color.Cyan;
10051065 }
10061066 else if (pci >= 100)
10071067 {
1008- ChangeCellBackColor(cellHaronTimeL3, Color.LightGreen);
1068+ backColor = Color.LightGreen;
10091069 }
10101070 else if (pci >= 80)
10111071 {
1012- ChangeCellBackColor(cellHaronTimeL3, Color.LightSkyBlue);
1072+ backColor = Color.LightSkyBlue;
10131073 }
10141074 else if (pci < 80)
10151075 {
1016- ChangeCellBackColor(cellHaronTimeL3, Color.Orange);
1076+ backColor = Color.Orange;
1077+ }
1078+
1079+ if (!isWarningOnly)
1080+ {
1081+ ChangeCellBackColor(cellHaronTimeL3, backColor);
1082+ }
1083+ else
1084+ {
1085+ if (backColor == Color.Orange)
1086+ {
1087+ ChangeCellBackColor(cellHaronTimeL3, Color.Sienna);
1088+ }
1089+ else
1090+ {
1091+ ChangeCellBackColor(cellHaronTimeL3, Color.Silver);
1092+ }
10171093 }
10181094 }
10191095 }
10201096
10211097 private static void ColorizeKankaku(DataGridViewCell cellKankaku)
10221098 {
1099+ if (cellKankaku?.Value == null)
1100+ {
1101+ return;
1102+ }
1103+
10231104 if (int.TryParse(cellKankaku.Value.ToString(), out int kankaku))
10241105 {
10251106 if (kankaku >= 30)
@@ -1035,6 +1116,11 @@ namespace UmaTest.App.Presentation.View
10351116
10361117 private static void ColorizeNinki(DataGridViewCell cellNinki)
10371118 {
1119+ if (cellNinki?.Value == null)
1120+ {
1121+ return;
1122+ }
1123+
10381124 if (int.TryParse(cellNinki.Value.ToString(), out int ninki))
10391125 {
10401126 switch (ninki)
@@ -1056,6 +1142,11 @@ namespace UmaTest.App.Presentation.View
10561142
10571143 private static void ColorizeJyuni(DataGridViewCell cellJyuni, DataGridViewCell cellNinki)
10581144 {
1145+ if ((cellJyuni?.Value == null) || (cellNinki?.Value == null))
1146+ {
1147+ return;
1148+ }
1149+
10591150 if (int.TryParse(cellJyuni.Value.ToString(), out int jyuni)
10601151 && int.TryParse(cellNinki.Value.ToString(), out int ninki))
10611152 {
@@ -1071,7 +1162,7 @@ namespace UmaTest.App.Presentation.View
10711162 ChangeCellBackColor(cellJyuni, Color.LightGreen);
10721163 break;
10731164 default:
1074- if ((ninki > 6) && (jyuni <= 6))
1165+ if ( (ninki >= 6) && (jyuni <= 6) && (ninki - jyuni > 1) )
10751166 {
10761167 ChangeCellBackColor(cellJyuni, Color.LightSkyBlue);
10771168 }
--- a/Infra/Helper/CodeHelper.cs
+++ b/Infra/Helper/CodeHelper.cs
@@ -24,6 +24,7 @@ namespace UmaTest.Infra.Helper
2424 public static readonly string TOZAI_CODE = "2301";
2525
2626 public static readonly string KYAKUSITU_KUBUN = "9201";
27+ public static readonly string RACE_DATA_KUBUN = "9202";
2728
2829 public const string TRACK_NAME_TURF_AND_DIRT = "芝ダ";
2930 public const string TRACK_NAME_TURF = "芝";
@@ -279,12 +280,26 @@ namespace UmaTest.Infra.Helper
279280 }
280281
281282 var kyakusituKbn = new Dictionary<string, string[]>();
282- master.Add(KYAKUSITU_KUBUN, kyakusituKbn);
283283 kyakusituKbn.Add("0", new string[] { NODATA });
284284 kyakusituKbn.Add("1", new string[] { "逃げ" });
285285 kyakusituKbn.Add("2", new string[] { "先行" });
286286 kyakusituKbn.Add("3", new string[] { "差し" });
287287 kyakusituKbn.Add("4", new string[] { "追込" });
288+ master.Add(KYAKUSITU_KUBUN, kyakusituKbn);
289+
290+ var raceDataKbn = new Dictionary<string, string[]>();
291+ raceDataKbn.Add("0", new string[] { NODATA });
292+ raceDataKbn.Add("1", new string[] { "出走馬名表" });
293+ raceDataKbn.Add("2", new string[] { "出馬表" });
294+ raceDataKbn.Add("3", new string[] { "速報成績(3着まで確定)" });
295+ raceDataKbn.Add("4", new string[] { "速報成績(5着まで確定)" });
296+ raceDataKbn.Add("5", new string[] { "速報成績(全馬着順確定)" });
297+ raceDataKbn.Add("6", new string[] { "速報成績(全馬着順+コーナ通過順)" });
298+ raceDataKbn.Add("7", new string[] { "成績" });
299+ raceDataKbn.Add("A", new string[] { "地方競馬" });
300+ raceDataKbn.Add("B", new string[] { "海外国際レース" });
301+ raceDataKbn.Add("9", new string[] { "レース中止" });
302+ master.Add(RACE_DATA_KUBUN, raceDataKbn);
288303 }
289304 }
290305 }
--- a/Infra/Helper/DbHelper.cs
+++ b/Infra/Helper/DbHelper.cs
@@ -22,6 +22,7 @@ namespace UmaTest.Infra.Helper
2222 return DatabaseConfiguration.Build()
2323 .UsingConnectionString("Host=192.168.0.200;Username=postgres;Password=postgres;Database=everydb2;Port=5432")
2424 .UsingProvider<PostgreSQLDatabaseProvider>()
25+ .UsingCommandTimeout(60)
2526 .Create();
2627 }
2728
--- a/Resources/Sql/NUmaRaceDao_FindAllRacesByKettoNumListAsync.sql
+++ b/Resources/Sql/NUmaRaceDao_FindAllRacesByKettoNumListAsync.sql
@@ -42,7 +42,7 @@ select distinct
4242 as kaishudate
4343 from
4444 v_uma_race_base1 ur
45- inner join n_course c
45+ left join n_course c
4646 using(jyocd, kyori, trackcd)
4747 )
4848 SELECT ur.*, r.*, k.*, c.*, ot.*, h1.*, h5.*, urdev.*
--- a/Resources/Sql/uma_race_stddev2.sql
+++ b/Resources/Sql/uma_race_stddev2.sql
@@ -45,7 +45,7 @@ select
4545 as kaishudate
4646 from
4747 v_uma_race_base1 ur
48- inner join n_course c
48+ left join n_course c
4949 using(jyocd, kyori, trackcd)
5050 ), v_uma_race_base3 as (
5151 select
--- a/UmaTest.csproj
+++ b/UmaTest.csproj
@@ -102,6 +102,7 @@
102102 <Reference Include="System.Xml" />
103103 </ItemGroup>
104104 <ItemGroup>
105+ <Compile Include="App\Adaptor\Gateway\ViewModel\Dto\RaceInfo.cs" />
105106 <Compile Include="App\Adaptor\Gateway\ViewModel\IMainWindowViewModel.cs" />
106107 <Compile Include="App\Adaptor\Presenter\AbstractAsyncLoadUmaListPresenter.cs" />
107108 <Compile Include="App\Domain\Model\Repository\Database\Dto\ChokyosiInfo.cs" />