我有一个查询,看起来像这样:
IQueryable<Profile> profiles = from p in connection.Profiles where profile.Email.Contains(txtSearch) select p;
我知道,将其转换为SQL时会使用a,LIKE '%<value of txtSearch>%'但如果txtSearch = "jon%gmail.com"将其转换为`LIKE'%jon〜%gmail.com%’。〜转义中间的通配符%。我该如何解决?我需要能够将通配符放入LINQ to EF搜索中。
LIKE '%<value of txtSearch>%'
txtSearch = "jon%gmail.com"
我不知道这是可能直接与LINQ,因为你可以调用像只有基本的字符串函数Contains,StartsWith或EndsWith。使用EntitySQL是可能的,因此您可以组合使用这些方法。
Contains
StartsWith
EndsWith
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();
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();