在下图中,您可以看到我放置断点的位置,然后进行了两步调试。您还可以看到,两个作业都非常有效,它们的计数相同且相同。
但是,如果我执行以下操作。运行完全相同的调用,但只在第三行直接中断,然后发生这种情况
set.QuestionSet.Questions 在分配之前应该有 8 个计数,所以它似乎由于某种原因没有正确分配。我怀疑这与我如何从数据库中获取数据有关。
Question 和 QuestionSet 是普通的 POCO,这里是整个方法的代码。
public IEnumerable<QuestionSet> SearchAndFilterQuestionsAndSets(string searchString, int nrPerPage, int page, out int totalSearchCount)
{
searchString = searchString.ToLower();
List<QuestionSet> finalList = new List<QuestionSet>();
var result = ActiveContext.QuestionSets
.Select(x => new
{
QuestionSet = x,
Questions = x.Questions.Where(
y =>
y.Description.ToLower().Contains(searchString)
).OrderBy(
z => z.Description
)
})
.ToList();
foreach (var set in result)
{
//If our search matched the set itself we load all questions
if (set.QuestionSet.Name.ToLower().Contains(searchString))
{
//we dont bring empty sets
if (set.QuestionSet.Questions.Count() > 0)
{
set.QuestionSet.Questions = set.QuestionSet.Questions.ToList<Question>().OrderBy(x => x.Description).ToList<Question>();
finalList.Add(set.QuestionSet);
}
}
//We had one or more questions matching the search term
else if (set.Questions.Count() > 0)
{
var b = set.Questions.ToList<Question>();
set.QuestionSet.Questions = set.Questions.ToList<Question>();
finalList.Add(set.QuestionSet);
}
}
totalSearchCount = finalList.Count();
return finalList.Skip((page - 1) * nrPerPage).Take(nrPerPage);
}
更新
如果我在失败的情况下这样做,否则如果
var a = new QuestionSet();
a.Id = set.QuestionSet.Id;
a.Name = set.QuestionSet.Name;
a.Questions = set.Questions.ToList<Question>();
finalList.Add(a);
然后它起作用了,所以问题出在匿名对象中,但是为什么当我使用调试器单步执行时它会起作用而不是其他情况?叫我不解。