繁体   English   中英

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

[英]How to use SQL wildcards in LINQ to Entity Framework

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

IQueryable<Profile> profiles = from p in connection.Profiles
    where profile.Email.Contains(txtSearch)
    select p;

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

我不确定这是否可以直接使用linq,因为你只能调用像ContainsStartsWithEndsWith这样的基本字符串函数。 使用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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM