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

时间:2011-05-27 07:20:33

标签: entity-framework escaping wildcard

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

2 个答案:

答案 0 :(得分:1)

您希望使用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都在supported canonical functions列表中。

答案 1 :(得分:0)

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