类似于实体框架6中的查询



我有PostgreSQL的实体框架现在我做这样的事情:

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);

所以我得到的产品名称如下:

测试一些短语等等

如何在没有原始sql的情况下使用linq或其他类型的查询执行相同的查询?

我需要从字符串开始的短语的一部分+从中间开始的部分,可能从结尾开始的部分。类似于正则表达式的东西。在postgres中,可以使用%符号来完成

我最初的回答是错误的(我向OP道歉。)

您可以执行Name.StartsWith、Name.EndsWith或Name.Contains.

除此之外,您还可以使用Devart.Data.PostgreSql.Entity.PgSql函数来实现LIKE比较。即

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

问候,

AB

PS:如果你有很多数据需要像那样搜索,请查看三元图索引-https://www.postgresql.org/docs/9.6/static/pgtrgm.html

你可以试试这个。

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

最新更新