好的,我有一个注册网站,其中一部分会阻止用户重新注册课程。
我的代码是这样的(最初):
if (sbj.enroll != sbj.max) //check if the subject is not full this time
{
var query = (from subj in emp.SelSubj where subj.studid == st.id && subj.studid == sbj.id select subj); //now check if the user already enrolled that subject code with his id
int x = query.Count(); //convert it to number
if (x == 0) //subject is not duplicate
{
sl.studid = st.id; //get the student's id then set it
sl.subjid = sbj.id; //get the subj's id then set it
sl.status = "P"; //set the initial status to P
emp.SelSubj.Add(sl); //add it to the database ofc
sbj.enroll++;
emp.SaveChanges(); //save changes
sb.Append(sbj.subj + " "); //append the log
TempData["success"] = sb.ToString(); //activate tempdata if there is atleast one subjects
}
else
{
duplicate.Append(sbj.subj + " "); //if the user failed the duplicate, append the subject
TempData["duplicate"] = duplicate.ToString(); //activate tempdata if there is atleast one duplicates
}
}
昨晚,它工作正常但是当我再次测试时它已经不再适用了。
通常,它只是简单,我需要做的只是计算返回的行数,如果它是0
那么就没有重复。我可以使用Count()
来做到这一点,但它已经不再适用了。
我决定检查每个断点的值。
结果:
而第二个是
所以应该有一行,但Count()
继续给我0
,从而允许用户重新注册主题(他们不应该这样做)
如果我将其更改为if(query == null)
,我的程序将有效但我想知道为什么它会继续给我0?我发誓昨晚工作正常。
答案 0 :(得分:6)
您的查询不正确
where subj.studid == st.id && subj.studid == sbj.id // both refer to studid
应该是
where subj.studid == st.id && subj.subjid== sbj.id
强烈建议您遵循正常的命名惯例,以尽量减少此类错误的风险(即您的字段应命名为StudentId
和SubjectId
)