使用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”,恰好是foreach循环退出后s
的最后一个值。任何人都可以对这种情况有所了解吗?
感谢。
答案 0 :(得分:3)
var qry = from c in ctx.Customers select c;
if (!string.IsNullOrEmpty(Name.Text))
{
foreach(string str in Name.Text.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries))
{
var s = str;
qry = qry.Where(c => c.Name.Contains(s));
}
}
ResultSet.DataSource = qry;
ResultSet.DataBind();