Entity Framework 4.1 - Как предотвратить экранирование символов EF? - PullRequest
1 голос
/ 27 мая 2011

Есть ли способ сказать 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));

ш rene_r

Ответы [ 2 ]

1 голос
/ 27 мая 2011

Вы хотите использовать LIKE, чтобы вы могли использовать либо свой путь, ESQL или Linq-to-entity и Contains каноническую функцию.Инструмент ORM не несет ответственности за перевод подстановочных знаков из вашего представления в представление подстановочных знаков в базе данных - вы должны сделать это самостоятельно с помощью инструментов, предоставляемых ORM.

Обычно это должно работать:

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

ОбаString.ToLower и String.Contains находятся в списке поддерживаемых канонических функций .

0 голосов
/ 27 мая 2011

Убедитесь, что выполняемый запрос верен. Посмотрите, как вы можете использовать контекстный журнал для этого http://www.thereforesystems.com/view-query-generate-by-linq-to-sql/

...