さて、あなたはタイトルからアイデアを得たので、コードを投稿させてください。コメントで何が起こっているのか(そして何をすべきか!)を説明します。
// select distinct subject from database
cmd.CommandText = "SELECT DISTINCT SubjectId FROM ClassSubject";
// a new command
OleDbCommand cmdTemp = new OleDbCommand();
// con id defined earlier
cmdTemp.Connection = con;
// Reader for outer loop
OleDbDataReader rdr;
// reader for inner loop
OleDbDataReader rdrTemp;
// reader for main command, that is for each subject
rdr = cmd.ExecuteReader();
// this will store subject id
int nTempID;
// this is the list that is supposed to contain all the classes (many to many relation btw class and subject)
// it does gets set fine, but later only 11 items show up
List<Int32> lstTempSub = new List<int>();
// a dictionary that will store all classes for this each particular subject
_clsSub = new Dictionary<int, List<int>>();
// read main, i.e. read subjects
while (rdr.Read())
{
// set the id of subject
nTempID = rdr.GetInt32(0);
// clear previous items
lstTempSub.Clear();
// this selects all the classes for this particular subject
cmdTemp.CommandText = "SELECT ClassId FROM ClassSubject WHERE SubjectID=" + nTempID + " ORDER BY ClassID";
// Execute in the tempReader
rdrTemp = cmdTemp.ExecuteReader();
// read
while (rdrTemp.Read())
{
// here, we add all the classes that are there for this particular subject to the list we createed
lstTempSub.Add(rdrTemp.GetInt32(0));
}
// close inner one
rdrTemp.Close();
// every thing is fine till here,
// i.e. nTempId is what is should be, the id of this particular subect
// lstTempSub contains all class for this subject, may be 1 or may be 100
_clsSub.Add(nTempID, lstTempSub);
}
// close outer one
rdr.Close();
// Here is where things get wrong
foreach(KeyValuePair<Int32, List<Int32>> pair in _clsSub)
{
// when the debugger gets here, the key is fine for each subject
// but pair.Value always have 11 values at most, if for a subject
// there were less class, then it shows okay,
// but in case there were more than 11, only 11 values are shown in pair.value
SomeMethod(pair.Key, pair.Value);
}
コードコメントですべてを説明したと思いますが、それでも何か説明が必要な場合は、お気軽にお問い合わせください。しかし、基本的に、私が言ったように、SomeMethodに到達したとき、リストはそのアイテムを維持していないようです(11以上の場合)(これは奇妙ですか?)それで、誰かがこれを手伝ってくれますか?どんな助けでもいただければ幸いです。
更新: 11個のアイテムが保存されているわけではなく、最後のサブジェクトのクラスの数が何であれ、その数のアイテムが保存されています。上のループで、サブジェクトの最後のIDが52で、そのIDに23のクラスがある場合、挿入されたすべてのレコードに対して、前であっても、_clsSub
値のリストには最大23の項目が含まれます。