0

我在此方法中收到 Specified cast is not valid 错误

public Dictionary<byte, string> getTeamList(int id1, Dictionary<byte, int> myList)
{    
    Dictionary<byte, string> result = new Dictionary<byte, string>();
    var query= _dataContext.usp_getItem();
    foreach(var item in query)
    {
        if (myList.ContainsKey(item.ID)
        {
            int count= _dataContext.usp_getCountPerID(id1, item.ID).FirstOrDefault().Count;
            if (myList[item.ID] > count)
            {
                result.Add(item.ID, item.Name);
            }
        }
        else
        {
            result.Add(item.ID, item.Name);
        }
    }
    return result;
} 

我在这一行收到 InvalidCastException 错误:

int count = _dataContext.usp_getCountPerID(item.ID).FirstOrDefault().Count;

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

更新

usp_getCountPerID 如下所示:

@ID1 INT,
@ID2 TINYINT
SELECT COUNT(ID) AS Count  //I'm changing this name so it's actually not "Count"
FROM   Table
WHERE  ID1 = @ID1
       AND ID2 = @ID2
4

2 回答 2

0

如果您从数据库中返回计数,您可能必须转换为int

也许

int count = (int)_dataContext.usp_getCountPerID(item.ID).FirstOrDefault().Count;

或者

int count = Convert.ToInt32(_dataContext.usp_getCountPerID(item.ID).FirstOrDefault().Count);

如果失败了,你也可以检查type对象Count是什么,这可能有助于找出发生了什么。

var count = _dataContext.usp_getCountPerID(item.ID).FirstOrDefault().Count;
Type t = count.GetType();

或者也许数据库正在返回null,所以试试

int? count = (int?)_dataContext.usp_getCountPerID(item.ID).FirstOrDefault().Count;
于 2013-01-29T01:23:36.540 回答
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-01-29T18:20:04.777 回答