Хорошо, после того, как я достаточно отключился, я понял, что проблема не в «Любой» или «Содержит».Linq to SQL не любит, когда вы комбинируете локальную последовательность (слова) с коллекцией SQL (db.tblSearches).Поэтому, чтобы выполнить это, вы должны разбить его на 2 отдельных запроса.
public static string[] getSearchSuggestions(int SectionID, string Query)
{
string[] Suggestions;
string[] Words = Query.Split(' ');
using (MainContext db = new MainContext())
{
string[] all = (from c in db.tblSearches
where c.SectionID == SectionID
select c.Term).ToArray();
Suggestions = (from a in all
from w in Words
where a.Contains(w)
select a).Distinct().ToArray();
}
return Suggestions;
}
Имейте в виду, что во втором запросе Contains
чувствителен к регистру, поэтому вам, возможно, придетсядобавьте метод расширения без учета регистра или перейдите к старой школе и пните их .ToUpper()
.Я запустил это в 4.0 в одном из моих контекстов, и он вернул все 88 строк правильно (из возможных 9814).Хотя это была тщательная PITA.Определенно +1 по этому вопросу.
Редактировать: Добавлено .Distinct()
к окончательному ответу.