在使用 Linq to Sql 时,我似乎遇到了问题,其中 Where 方法将字符串引用添加到条件列表中。当参考改变时,它会产生错误的结果。例如,下面的代码片段在与输入文本“John Smith”一起使用时会返回名称中包含“Smith”的所有记录
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%'
请注意,这两个参数都被评估为“smith”,这恰好是s
foreach 循环退出后的最后一个值。任何人都可以对这种情况提供一些见解吗?
谢谢。