我在此方法中收到指定强制转换无效错误
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;
}
我在此行收到无效投射异常错误:
int count = _dataContext.usp_getCountPerID(item.ID).FirstOrDefault().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
如果从数据库返回计数,则可能必须转换为int
也许
int count = (int)_dataContext.usp_getCountPerID(item.ID).FirstOrDefault().Count;
或
int count = Convert.ToInt32(_dataContext.usp_getCountPerID(item.ID).FirstOrDefault().Count);
如果失败,您也可以检查对象Count
的type
,这可能有助于找出发生了什么。
var count = _dataContext.usp_getCountPerID(item.ID).FirstOrDefault().Count;
Type t = count.GetType();
或者数据库可能返回null
所以尝试
int? count = (int?)_dataContext.usp_getCountPerID(item.ID).FirstOrDefault().Count;
这可能不是最好的解决方案,但我更改了我的存储过程以计数:
@SessionID INT
SELECT ID, COUNT(Member) AS Count
FROM Table
WHERE SessionID = @SessionID
GROUP BY ID
返回一个包含 ID 和每个 ID 的成员总数的表。
因此,我不是在 foreach 循环中获取每个 ID 的计数值,而是在进入 foreach 循环之前检索 ID 和 Count 的列表,这有效。
我仍然不明白为什么我会收到铸造错误,所以如果有人可以解释我错过了什么,我会将其标记为答案。
非常感谢您的所有帮助。