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