2009-11-16 37 views
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。任何人都可以提供一些洞察这种情况?

谢谢。

回答