0

我有一个返回 id 和 name 列表的存储过程。

TeamID(字节) TeamName(字符串)
----------------------------------
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);
        }
    }
} 

在第二个 foreach 循环中,第一项有时有效,但我得到invalidCastException: Specified cast is not valid. 当我注释掉第一个循环时,它工作正常,但是当我有两个循环foreach时,我似乎得到了 invalidCastException 错误。foreach

似乎它在抱怨这部分:

int memberCount = _dataContext.usp_getNumberOfMemberPerTeam(item2.TeamID)
    .FirstOrDefault().MemberCount;

MemberCount 的类型是int。当我注释掉这行代码时它起作用了。

4

1 回答 1

0

这可能不是最好的解决方案,但我改变了我的存储过程来计算:

@SessionID INT
SELECT ID, COUNT(Member) AS Count
FROM   Table
WHERE  SessionID = @SessionID 
GROUP BY ID

它返回一个包含 ID 和每个 ID 的成员总数的表

因此,我没有在 foreach 循环中获取每个 ID 的计数值,而是在进入 foreach 循环之前检索 ID 和 Count 的列表,这很有效。

我仍然不明白为什么我会收到投射错误,所以如果有人能解释我错过了什么,我会将其标记为答案。

于 2013-04-03T19:41:31.863 回答