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



有没有办法告诉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));

brrene_r

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

一般来说,这应该有效:

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

String.ToLowerString.Contains都在支持的规范函数列表中。

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

最新更新