即使返回了一行,Count()也会继续给我0

时间:2015-10-11 07:34:58

标签: c# asp.net-mvc

好的,我有一个注册网站,其中一部分会阻止用户重新注册课程。

我的代码是这样的(最初):

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()来做到这一点,但它已经不再适用了。

我决定检查每个断点的值。

结果:

第一个值是 enter image description here

而第二个是

enter image description here

我决定重新运行查询以检查: enter image description here

所以应该有一行,但Count()继续给我0,从而允许用户重新注册主题(他们不应该这样做)

如果我将其更改为if(query == null),我的程序将有效但我想知道为什么它会继续给我0?我发誓昨晚工作正常。

enter image description here

1 个答案:

答案 0 :(得分:6)

您的查询不正确

 where subj.studid == st.id && subj.studid == sbj.id // both refer to studid

应该是

 where subj.studid == st.id && subj.subjid== sbj.id

强烈建议您遵循正常的命名惯例,以尽量减少此类错误的风险(即您的字段应命名为StudentIdSubjectId