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

これは最善の解決策ではないかもしれませんが、これにカウントを取得するためにストアドプロシージャを変更しました。

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

これは、IDと各IDのメンバーの総数を含むテーブルを返します

したがって、foreachループ内のIDごとのカウントの値を取得する代わりに、foreachループに入る前にIDとカウントのリストを取得します。これは機能します。

なぜキャストエラーが発生したのかまだわからないので、誰かが私が欠けているものを説明できれば、それを答えとしてマークします。

本当にありがとうございました。

于 2013-01-29T18:20:04.777 に答える
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 に答える