2017-02-15 2 views
0

У меня есть Entity Framework с PostgreSQL Теперь я сделать что-то вроде этого:как запрос в рамках Entity 6

string query = "select * from dbo.Products where name ilike '%test%phrase%' 
       or code ilike '%test%phrase%' or code2 ilike '%test%phrase%'"; 

var result = context.Products.SqlQuery(query); 

Так я получаю продукты с именем, как это:

тест некоторые фразы
некоторые испытания
некоторая фраза и так далее.

Как выполнить тот же запрос с linq или другим типом запроса без raw sql?

Мне нужна часть фразы от начала строки + часть от середины, майни часть от конца. Что-то вроде регулярного выражения. В postgres это можно сделать с помощью символа%

+0

Попробуйте это для регулярных выражений HTTP: // buildregex.com/ – Eldho

+0

Взгляните на мой ответ здесь: http://stackoverflow.com/questions/1040380/wildcard-search-for-linq/42307642#42307642 Я не знаю, работает ли он для Postgresql, но Я думаю, что это так, потому что есть эквивалентные функции, такие как str_pos и position. –

ответ

1

Мой первоначальный ответ был неправильным (мои извинения ОП.)

Вы можете сделать Name.StartsWith, Name.EndsWith или Name.Contains.

Кроме того, вы можете использовать Devart.Data.PostgreSql.Entity.PgSqlFunctions для достижения LIKE-сравнений. т.е.

where PgSqlFunctions.Like(PgSqlFunctions.Lower(c.Name), PgSqlFunctions.Lower(pattern)) 

С уважением,

AB

PS: Если у вас есть много данных, которая нуждается в поисках как это проверить триграмма индексы - https://www.postgresql.org/docs/9.6/static/pgtrgm.html

0

Вы можете попробовать это.

var result = context.Products.Where(h=>h.Name.Contains("TestPhrase") || 
            h.Code.Contains("TestPhrase")) 
          .ToList(); 
+0

Как это работает, если: фраза поиска ** «некоторая% фраза» ** и результат должен быть ** «некоторая тестовая фраза» ** –

+0

Тогда это не будет работать – Eldho

+0

@dmk вы можете обновить вопрос, чтобы исправить ваше намерение – Eldho

Смежные вопросы