当前位置: 首页 > 面试题库 >

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

谷森
2023-03-14
问题内容

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

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


问题答案:

我不知道这是可能直接与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();


 类似资料:
  • 问题内容: 我尝试搜索以a或b或c开头的名称,因此我使用了以下查询: 它没有给出空结果或失败结果,只是给出了空值,这意味着什么也没找到。有人可以指导我使用这种方法吗? 问题答案: 您无法使用做这种事情。您需要像这样使用: 该手段别的,所以这将匹配任何名字以A,B或C开头,有别的跟随它。

  • 问题内容: 我有一个具有属性名称和姓氏的用户对象。我想使用一个查询来搜索这些字段,并且在文档中找到了该字段,但是我不知道如何将其与通配符一起正确使用。可能吗? 我尝试了查询,但没有成功: 问题答案: 或者,您可以对通配符使用查询。 这将比在索引时使用nGram过滤器慢(请参阅我的其他答案),但是如果您正在寻找一种快速且肮脏的解决方案… 我也不确定您的映射,但是如果您使用而不是映射,则需要如下所示:

  • 问题内容: 如何在路线中指定通配符- 因此,以上内容适用于/ admin / users和/ admin / users / 1或/ admin / org / 3。因此,管理后可能会有一两个级别的路径。我该怎么做 ? 问题答案: 当前,AngularJS不支持路由中的正则表达式。 您可以按照以下方法解决 http://plnkr.co/edit/tBumW2oEqki2sEl1hjSc?p=pr

  • 本文向大家介绍SQL Server中通配符的使用示例,包括了SQL Server中通配符的使用示例的使用技巧和注意事项,需要的朋友参考一下 在某些情况下熟悉SQL Server 通配符的使用可以帮助我们简单的解决很多问题。   结果集: 结果集:        

  • 问题内容: 我想知道是否以及如何在路径定义中使用通配符。我想更深入地查找一个文件夹并尝试使用*,但这不起作用。 我想访问随机文件夹中的文件。Folderstructure是这样的: 我试过的 先感谢您! 问题答案: 我认为不可能以这种方式使用通配符。我建议您对任务使用如下方式:

  • 问题内容: 使用分区时,通常需要一次删除所有分区。 然而 不起作用。(不考虑使用通配符)。 有没有一种优雅的方法(易于记忆),可以在一个命令中使用通配符删除多个表? 问题答案: 使用逗号分隔的列表: 如果您确实需要脚枪,这可以做到: