2017-02-15 256 views
0

查詢我有實體框架與PostgreSQL的 現在我做這樣的事情:像在實體框架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或其他類型的查詢執行相同的查詢沒有原始的sql?

我需要從字符串+中間部分開始,部分從結尾開始的部分短語。像正則表達式一樣。在postgres中可以用%符號來完成

+0

嘗試此正則表達式的http:// buildregex.com/ – Eldho

+0

看看我的答案在這裏:http://stackoverflow.com/questions/1040380/wildcard-search-for-linq/42307642#42307642 我不知道,如果它對於PostgreSQL爲好,但我認爲它確實存在等同的功能,如str_pos和位置。 –

回答

1

我原來的答案是錯的(我道歉的OP)。

你可以做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