Моя проблема требует, чтобы я динамически добавлял предложения where в IQueryable на основе пользовательского ввода.Проблема, с которой я столкнулся, заключается в том, что Linq-to-SQL, похоже, не нравится иметь несколько предложений where в одном поле, а фактически дублирует значение arg поиска для последнего элемента по всем параметрам.Я проверил это поведение через трассировку SQL.Вот что я вижу.
WHERE ([t22].[OpenText] LIKE @p11) AND ([t22].[OpenText] LIKE @p12)
-- @p11: Input NVarChar (Size = 10; Prec = 0; Scale = 0) [%classify%] // Should be 2da57652-dcdf-4cc8-99db-436c15e5ef50
-- @p12: Input NVarChar (Size = 10; Prec = 0; Scale = 0) [%classify%]
Мой код использует цикл для динамического добавления предложений where, как вы можете видеть ниже.Мой вопрос, как мне обойти это?Это похоже на ошибку в инструменте, не так ли?
// add dyanmic where clauses based on user input.
MatchCollection searchTokens = Helper.ExtractTokensWithinBracePairs(filterText);
if (searchTokens.Count > 0)
{
foreach(Match searchToken in searchTokens)
query = query.Where((material => material.OpenText.Contains(searchToken.Value)));
}
else
{
query = query.Where((material => material.OpenText.Contains(filterText)));
}