2009-11-16 82 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。任何人都可以提供一些洞察這種情況?

謝謝。

回答