有没有办法告诉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.ToLower
和String.Contains
都在支持的规范函数列表中。
检查执行的查询是否正确。请参阅此处如何使用上下文的日志来执行此操作http://www.thereforesystems.com/view-query-generate-by-linq-to-sql/