实体框架 4.1 - 如何防止 EF 转义通配符?

发布于 2024-11-10 01:23:22 字数 633 浏览 1 评论 0原文

有没有办法告诉 EF 不要转义我的通配符?

我当前的解决方案如下所示:

 var movieNameWithProperWildcards = string.Format("%{0}%",    
 movieName.ToLower().Replace("*", "%"));

 var sqlParameter = new SqlParameter { ParameterName = "searchParameter", Value =   
 movieNameWithProperWildcards };

 List<Movie> movieEntities = MovieContext.Movies.SqlQuery("select * from Movies WHERE 
 Lower(title) like @searchParameter", sqlParameter).ToList();

但这会更好:

 List<Movie> movieEntities = MovieContext.Movies.Where(movie =>  
 movie.Title.ToLower().Contains(movieName));

br 雷内_r

Is there a way to tell EF not to escape my wildcards?

My current solution looks like this:

 var movieNameWithProperWildcards = string.Format("%{0}%",    
 movieName.ToLower().Replace("*", "%"));

 var sqlParameter = new SqlParameter { ParameterName = "searchParameter", Value =   
 movieNameWithProperWildcards };

 List<Movie> movieEntities = MovieContext.Movies.SqlQuery("select * from Movies WHERE 
 Lower(title) like @searchParameter", sqlParameter).ToList();

But that would be much nicer:

 List<Movie> movieEntities = MovieContext.Movies.Where(movie =>  
 movie.Title.ToLower().Contains(movieName));

br
rene_r

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

乙白 2024-11-17 01:23:22

您想要使用LIKE,这样您就可以使用您的方式,ESQL 或 Linq-to-entities 和 Contains 规范函数。 ORM 工具不负责将通配符从您的表示形式转换为数据库中的通配符表示形式 - 您必须使用 ORM 提供的工具自己完成此操作。

一般来说,这应该有效:

var query = from m in ctx.Movies
            where m.Name.ToLower().Contains(movieName)
            select m;

String.ToLowerString.Contains 都在 支持的规范函数

You want to use LIKE so you can use either your way, ESQL or Linq-to-entities and Contains canonical function. ORM tool is not responsible for translating wildcards from your representation to wildcards representation in the database - you must do it yourselves with tools provided by ORM.

Generally this should work:

var query = from m in ctx.Movies
            where m.Name.ToLower().Contains(movieName)
            select m;

Both String.ToLower and String.Contains are in the list of supported canonical functions.

走野 2024-11-17 01:23:22

检查执行的查询是否正确。请参阅此处如何使用上下文的日志来执行此操作 http:// /www.thereforesystems.com/view-query-generate-by-linq-to-sql/

Check that the query that gets executed is right. See here how you can use context's Log to do that http://www.thereforesystems.com/view-query-generate-by-linq-to-sql/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文