Это сводит меня с ума.Что мне здесь не хватает.Я использую EF, и если у меня есть код, подобный следующему:
using (LexiconEntities ctx = new LexiconEntities())
{
var query = from w in ctx.Words
select new WordEntryDataModel
{
Word = w.Anagram,
NumOfAnagrams = w.NumAnagrams.Value,
Length = w.Length.Value,
...
};
SearchCriterion c1 = new SearchCriterion();
SearchCriterion c2 = new SearchCriterion();
c1.MinValue = 3;
c1.MaxValue = 3;
c2.MinValue = 4;
c2.MaxValue = 4;
query = query.Where(w => w.Length >= c1.MinValue && w.Length <= c1.MaxValue);
query = query.Where(w => w.NumOfAnagrams >= c2.MinValue && w.NumOfAnagrams <= c2.MaxValue);
...
}
И когда я отлаживаю запрос, я получаю правильные результаты (8 записей).Это также работает, как и ожидалось в Linqpad (что чертовски круто).
Но если я создаю критерии поиска как список объектов критериев и динамически добавляю предложения Where (), перебирая критерии поиска какследует:
foreach (SearchCriterion c in criteria.SearchCriteria)
{
switch (c.Type)
{
case SearchCriterionType.WordLength:
query = query.Where(w => w.Length >= c.MinValue && w.Length <= c.MaxValue);
break;
case SearchCriterionType.NumberOfAnagrams:
query = query.Where(w => w.NumOfAnagrams >= c.MinValue && w.NumOfAnagrams <= c.MaxValue);
break;
...
case SearchCriterionType.NumberOfVowels:
query = query.Where(w => w.NumOfVowels >= c.MinValue && w.NumOfVowels <= c.MaxValue);
break;
}
}
...
Я получаю совершенно разные (и неверные) результаты.Я отладил оператор switch, и в моих критериях поиска есть два правильно построенных объекта критерия, установленных на правильные значения.Есть что-то в условно добавленных выражениях where, которые не нравятся моему запросу.
Что я делаю не так?