Ben*_*man 6 sql entity-framework-4 c#-4.0
我有一个看起来像这样的查询:
IQueryable<Profile> profiles = from p in connection.Profiles
where profile.Email.Contains(txtSearch)
select p;
Run Code Online (Sandbox Code Playgroud)
我知道当它转换为SQL时它会使用a LIKE '%<value of txtSearch>%'但是如果txtSearch = "jon%gmail.com"它将它转换为`LIKE'%jon~%gmail.com%'.〜逃脱了中间的百分比,这是一张外卡.我该如何解决这个问题?我需要能够将通配符放入我的LINQ到EF搜索中.
我不确定这是否可以直接使用 linq 实现,因为您只能调用基本字符串函数,例如Contains,StartsWith或EndsWith。Entity SQL 是可能的,因此您可以组合这些方法。
var query = new ObjectQuery<Profile>(
@"SELECT VALUE p
FROM CsdlContainerName.Profiles AS p
WHERE p.Email LIKE '" + wildcardSearch + "'",
context);
var result = query.AsQueryable().OrderByDescending(p => p.Name).ToList();
Run Code Online (Sandbox Code Playgroud)
ESQL 注入反击:)
没有注入漏洞的第二个版本(我没有尝试,但它应该可以工作):
var commandText =
@"SELECT VALUE p
FROM CsdlContainerName.Profiles AS p
WHERE p.Email LIKE @search";
var query = new ObjectQuery<Profile>(commandText, context);
query.Parameters.Add(new ObjectParameter("search", wildcardSearch));
var result = query.AsQueryable().OrderByDescending(p => p.Name).ToList();
Run Code Online (Sandbox Code Playgroud)