繁体   English   中英

Npgsql EF Core 连接表达式

[英]Npgsql EF Core concatenation expression

我有一个包含firstnamelastname和 trigram 索引列的customer表:

CREATE INDEX ix_customer_search_trgm ON customer USING gin ((firstname || lastname ) gin_trgm_ops);"

我正在尝试使用 C#/EFCore 按名字或姓氏搜索客户,但不知道如何为firstname || lastname指定串联表达式firstname || lastname

我尝试了以下

  1. dbContext.Customers.Where(q => EF.Functions.ILike('firstname || lastname', $"%{searchTerm}%")); 这会生成如下查询(注意$1 = 'f'看起来很奇怪)并且与列不匹配
2020-12-01 23:04:52.119 AEDT [38091] LOG:  execute <unnamed>: SELECT ...
        FROM customer AS c
        WHERE $1

2020-12-01 23:04:52.119 AEDT [38091] DETAIL:  parameters: $1 = 'f'
  1. dbContext.Customers.Where(q => EF.Functions.ILike(q.firstname, $"%{searchTerm}%")); 这会生成我期望的那种查询,但显然只过滤表达式中的一列。
2020-12-01 23:02:21.777 AEDT [38034] LOG: execute <unnamed>: SELECT ...
        FROM customer AS c
        WHERE c.customer ILIKE $1 ESCAPE ''
2020-12-01 23:02:21.777 AEDT [38034] DETAIL:  parameters: $1 = '%abc%'

如何使用 EF Core 为上述内容指定连接表达式?

与所有其他 EF Core LINQ 方法一样,ILike 不接受集成到查询中的原始 SQL 字符串,而是 EF Core 为您翻译的 .NET 表达式。 因此,您应该能够通过以下方式实现上述目标:

dbContext.Customers.Where(q => EF.Functions.ILike(q.FirstName + q.LastName, $"%{searchTerm}%"));
~~~

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM