Кажется, у меня проблема при использовании Linq to Sql, в которой метод Where добавляет строковую ссылку в список критериев. Когда ссылка изменяется, это приводит к ошибочным результатам. Например, приведенный ниже фрагмент кода при использовании с входным текстом «Джон Смит» возвращает все записи, имя которых содержит «Смит»
var qry = from c in ctx.Customers select c;
if (!string.IsNullOrEmpty(Name.Text))
{
foreach(string s in Name.Text.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries))
qry = qry.Where(c => c.Name.Contains(s));
}
ResultSet.DataSource = qry;
ResultSet.DataBind();
Этот фрагмент фактически выполняет следующий SQL:
SELECT (fields)
FROM [dbo].[Customers] AS [t0]
WHERE ([t0].[Name] LIKE @p0) AND ([t0].[Name] LIKE @p1)
@p0='%smith%',@p1='%smith%'
Обратите внимание, что оба параметра оцениваются как "кузнец", который оказывается последним значением s
после выхода из цикла foreach. Кто-нибудь может предложить некоторое понимание этой ситуации?
Спасибо.