Where メソッドが条件リストに文字列参照を追加する Linq to Sql を使用すると、問題が発生するようです。参照が変更されると、誤った結果が生成されます。たとえば、以下のコード スニペットを入力テキスト '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" に評価されることに注意してください。これs
は foreach ループが終了した後の最後の値になります。誰でもこの状況について洞察を提供できますか?
ありがとう。