如何在LINQ to Entity Framework中使用SQL通配符

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搜索中.

Lad*_*nka 2

我不确定这是否可以直接使用 linq 实现,因为您只能调用基本字符串函数,例如Contains,StartsWithEndsWithEntity 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)