有没有办法告诉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
答案 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.ToLower
和String.Contains
都在supported canonical functions列表中。
答案 1 :(得分:0)
检查执行的查询是否正确。请参阅此处如何使用上下文的日志来执行http://www.thereforesystems.com/view-query-generate-by-linq-to-sql/