Npgsql EF Core 串联表达式
Npgsql EF Core concatenation expression
我有一个 customer
table 列 firstname
、lastname
和一个三元组索引:
CREATE INDEX ix_customer_search_trgm ON customer USING gin ((firstname || lastname ) gin_trgm_ops);"
我正在尝试使用 C#/EFCore 按名字或姓氏搜索客户,但无法弄清楚如何为 firstname || lastname
指定串联表达式
我尝试了以下方法
dbContext.Customers.Where(q => EF.Functions.ILike('firstname || lastname', $"%{searchTerm}%"));
这会生成如下查询(注意 = 'f'
看起来很奇怪)并且与列 不匹配
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'
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}%"));
~~~
我有一个 customer
table 列 firstname
、lastname
和一个三元组索引:
CREATE INDEX ix_customer_search_trgm ON customer USING gin ((firstname || lastname ) gin_trgm_ops);"
我正在尝试使用 C#/EFCore 按名字或姓氏搜索客户,但无法弄清楚如何为 firstname || lastname
我尝试了以下方法
dbContext.Customers.Where(q => EF.Functions.ILike('firstname || lastname', $"%{searchTerm}%"));
这会生成如下查询(注意= 'f'
看起来很奇怪)并且与列 不匹配
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'
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}%"));
~~~