我有一个存储过程,它返回一个id和name列表。
TeamID(byte) TeamName(string) ---------------------------------- 1 baseball 2 basketball
我有一个显示团队名称的下拉列表,但如果团队容量已满,团队名称不应该在列表中。我使用此方法获取团队列表,如果团队的容量未满,则将其添加到Dictionary中,然后返回Dictionary。 该方法如下:
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);
}
}
}
在第二个foreach循环中,第一个项目有时会起作用,但我得到invalidCastException: Specified cast is not valid
。当我注释掉第一个foreach
循环时,它工作正常,但是当我有两个foreach
循环时,似乎我得到invalidCastException错误。
它似乎在抱怨这一部分:
int memberCount = _dataContext.usp_getNumberOfMemberPerTeam(item2.TeamID)
.FirstOrDefault().MemberCount;
MemberCount的类型为int
。当我注释掉这行代码时,它可以工作。
答案 0 :(得分:0)
这可能不是最好的解决方案,但我更改了我的存储过程以计算:
@SessionID INT
SELECT ID, COUNT(Member) AS Count
FROM Table
WHERE SessionID = @SessionID
GROUP BY ID
返回一个包含ID的表和每个ID的成员总数
因此,我没有在foreach循环中获取每个ID的计数值,而是在进入foreach循环之前检索ID和Count列表,这样做有效。
我仍然不明白为什么我会收到施法错误,所以如果有人可以解释我遗漏的内容,我会将其标记为答案。