包含在 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。从您的提供商那里了解如何配置此类索引。