加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

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

发布时间:2021-01-22 15:48:39 所属栏目:编程 来源:网络整理
导读:我有一个看起来像这样的查询: IQueryableProfile profiles = from p in connection.Profiles where profile.Email.Contains(txtSearch) select p; 我知道当它转换为SQL时,它行使LIKE’% txtSearch%’的值,可是假如txtSearch =“jon%gmail.com”它将它转换

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

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

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读