[英]Npgsql EF Core concatenation expression
我有一个包含firstname
、 lastname
和 trigram 索引列的customer
表:
CREATE INDEX ix_customer_search_trgm ON customer USING gin ((firstname || lastname ) gin_trgm_ops);"
我正在尝试使用 C#/EFCore 按名字或姓氏搜索客户,但不知道如何为firstname || lastname
指定串联表达式firstname || lastname
我尝试了以下
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'
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.