一尘不染

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

sql

我有一个查询,看起来像这样:

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


阅读 132

收藏
2021-03-10

共1个答案

一尘不染

我不知道这是可能直接与LINQ,因为你可以调用像只有基本的字符串函数ContainsStartsWithEndsWith使用EntitySQL是可能的,因此您可以组合使用这些方法。

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();
2021-03-10