包含在 Linq-to-Entities 中
Contains inside Linq-to-Entities
我需要在 IQueryable
中实现按词条搜索和存储,但 Entity Framework 不允许在 Linq-to-Entities 中使用 Contains
方法,我该如何替换它?
query = query.Where(e => e.Fullname.Contains(searchTerm, StringComparison.InvariantCultureIgnoreCase) ||
e.Email.Contains(searchTerm, StringComparison.InvariantCultureIgnoreCase) ||
e.Username.Contains(searchTerm, StringComparison.InvariantCultureIgnoreCase));
移除StringComparison.InvariantCultureIgnoreCase
query = query.Where(e => e.Fullname.Contains(searchTerm) ||
e.Email.Contains(searchTerm) ||
e.Username.Contains(searchTerm));
Linq to SQL 将 Contains("searchterm")
转换为不区分大小写的 like '%searchterm%'
Entity Framework Core 在 Microsoft.EntityFrameworkCore
命名空间中有一个内置函数 EF.Functions
。
你可以这样使用它
query = query.Where(e => EF.Functions.FreeText(e.Fullname, searchTerm) || EF.Functions.Contains(e.Email, searchTerm)); //etc
注意。要使用此功能 FullTextSearch
索引应配置在 table 列上。
我个人使用 Postgres
,这是关于如何在实体上配置 FullTextSearch
索引的 documentation。从您的提供商那里了解如何配置此类索引。
我需要在 IQueryable
中实现按词条搜索和存储,但 Entity Framework 不允许在 Linq-to-Entities 中使用 Contains
方法,我该如何替换它?
query = query.Where(e => e.Fullname.Contains(searchTerm, StringComparison.InvariantCultureIgnoreCase) ||
e.Email.Contains(searchTerm, StringComparison.InvariantCultureIgnoreCase) ||
e.Username.Contains(searchTerm, StringComparison.InvariantCultureIgnoreCase));
移除StringComparison.InvariantCultureIgnoreCase
query = query.Where(e => e.Fullname.Contains(searchTerm) ||
e.Email.Contains(searchTerm) ||
e.Username.Contains(searchTerm));
Linq to SQL 将 Contains("searchterm")
转换为不区分大小写的 like '%searchterm%'
Entity Framework Core 在 Microsoft.EntityFrameworkCore
命名空间中有一个内置函数 EF.Functions
。
你可以这样使用它
query = query.Where(e => EF.Functions.FreeText(e.Fullname, searchTerm) || EF.Functions.Contains(e.Email, searchTerm)); //etc
注意。要使用此功能 FullTextSearch
索引应配置在 table 列上。
我个人使用 Postgres
,这是关于如何在实体上配置 FullTextSearch
索引的 documentation。从您的提供商那里了解如何配置此类索引。