【问题标题】:like query in Entity framework 6像实体框架 6 中的查询
【发布时间】:2017-02-15 09:05:01
【问题描述】:

我有 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 中可以使用 % 符号来完成

【问题讨论】:

标签: postgresql linq entity-framework-6


【解决方案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:如果您有大量需要搜索的数据,请查看 trigram 索引 - https://www.postgresql.org/docs/9.6/static/pgtrgm.html

【讨论】:

    【解决方案2】:

    你可以试试这个。

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

    【讨论】:

    • 如果:搜索短语是 "some%phrase" 并且结果必须是 "some test phrase",它是如何工作的
    • @dmk 您能否更新问题以纠正您的意图
    • 我需要搜索作为我给出的示例。我不能用平等的短语来查找。我需要从字符串开头的部分短语+从中间的部分,也许从结尾部分​​。类似于正则表达式的东西。在 postgres 中可以使用 % 符号
    猜你喜欢
    • 2015-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 2013-03-17
    相关资源
    最近更新 更多