ID と名前のリストを返すストアド プロシージャがあります。
チームID(バイト) チーム名(文字列) ---------------------------------- 1 野球 2 バスケットボール
チーム名を表示するドロップダウン リストがありますが、チームの容量がいっぱいの場合、チーム名はリストに表示されません。このメソッドを使用してチームのリストを取得し、チームのキャパシティがいっぱいでない場合はそれらをディクショナリに追加してから、ディクショナリを返します。メソッドは次のようになります。
public Dictionary<byte, string> getTeamList()
{
Dictionary<byte, int> capacityList = new Dictionary<byte, int>();
var capacityQuery = _dataContext.usp_getTeamCapacityList();
foreach(var item in capacityQuery)
{
capacityList.Add(item.TeamID, item.Capacity);
}
Dictionary<byte, string> result = new Dictionary<byte, string>();
var sports = _dataContext.usp_getSports();
foreach(var item2 in sports)
{
if(capacityList.ContainsKey(item2.TeamID)
{
int memberCount = _dataContext.usp_getNumberOfMemberPerTeam(item2.TeamID)
.FirstOrDefault().MemberCount;
if(capacityList[item2.TeamID] > memberCount)
{
result.Add(item2.TeamID, item2.TeamName);
}
}
else
{
result.Add(item2.TeamID, item2.TeamName);
}
}
}
2 番目の foreach ループでは、最初の項目が機能することがありますが、invalidCastException: Specified cast is not valid
. 最初のループをコメントアウトするとforeach
正常に動作しますが、両方のforeach
ループがあると、invalidCastException エラーが発生するようです。
この部分に不平を言っているようです:
int memberCount = _dataContext.usp_getNumberOfMemberPerTeam(item2.TeamID)
.FirstOrDefault().MemberCount;
MemberCount のタイプは ですint
。このコード行をコメントアウトすると機能します。