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