次の画像では、ブレークポイントを配置して 2 つのステップをデバッグした場所を確認できます。また、両方の割り当てがうまく機能し、カウントも同じであることもわかります。
ただし、次のことを行う場合。まったく同じ呼び出しを実行しますが、3行目で直接中断するだけで、これが起こります
set.QuestionSet.Questions は割り当て前に 8 のカウントを持つ必要があるため、何らかの理由で適切に割り当てられていないようです。これは、DB からデータを取得する方法と関係があると思われます。
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);
}
アップデート
失敗したelse ifで代わりにこれを行うと
var a = new QuestionSet();
a.Id = set.QuestionSet.Id;
a.Name = set.QuestionSet.Name;
a.Questions = set.Questions.ToList<Question>();
finalList.Add(a);
その後、機能するので、問題は匿名オブジェクト内にありますが、デバッガーを使用してステップスルーすると機能し、そうでない場合は機能するのはなぜですか?? 私を困惑させてください。