微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我有一个看起来像这样的查询
IQueryable<Profile> profiles = from p in connection.Profiles
    where profile.Email.Contains(txtSearch)
    select p;

我知道当它转换为sql时,它使用LIKE’%< txtSearch>%’的值,但是如果txtSearch =“jon%gmail.com”它将它转换为`LIKE’%jon~%gmail.com%’ . 〜逃脱了中间的百分比,这是一张外卡.我该如何解决这个问题?我需要能够将通配符放入我的LINQ到EF搜索中.

解决方法

我不确定这是否可以直接使用linq,因为你只能调用像Contains,StartsWith或EndsWith这样的基本字符串函数. It is possible with 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();

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();

原文地址:https://www.jb51.cc/mssql/83676.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐