Npgsql EF Core 串联表达式

Npgsql EF Core concatenation expression

我有一个 customer table 列 firstnamelastname 和一个三元组索引:

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

我正在尝试使用 C#/EFCore 按名字或姓氏搜索客户,但无法弄清楚如何为 firstname || lastname

指定串联表达式

我尝试了以下方法

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

2020-12-01 23:04:52.119 AEDT [38091] DETAIL:  parameters:  = '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  ESCAPE ''
2020-12-01 23:02:21.777 AEDT [38034] DETAIL:  parameters:  = '%abc%'

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

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

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