EF Core 2.0搜索包含过滤器的多个列



假设实体, Patient存在于上下文中,它是使用数据库 - 第一方法生成的,因此我无法修改数据库。

public class Patient
{
   public string Id { get; set; }
   public string Surname { get; set; }
   public string Forename { get; set; }
}

我想用名称过滤患者,例如名字或姓氏或全名。我目前有以下查询:

await query
         .Where(p => p.Forename != null && p.Forename.ToLower().Contains(filter) ||
                     p.Surname != null && p.Surname.ToLower().Contains(filter))
         .ToListAsync();

这显然只能单独检查forename/姓氏列。如果过滤器是全名,则无效。

我尝试在WHERE子句中使用字符串插值来应用包含的滤波器,以与Forename和姓氏的组合使用,但在EF Core中不支持它并在本地执行。由于数据库中有超过一百万的患者,因此在应用程序中本地执行查询不是一个选择,必须在数据库中完成(搜索需要一分钟时间(。

有什么方法可以解决此问题?

插值无法通过ef。

翻译

只需使用' '操作员将字符串与下面的串联相连:

await query
     .Where(p => p.Forename.ToLower().Contains(filter) ||
                 p.Surname.ToLower().Contains(filter)) || 
                 (p.Forename + " " + p.Surname).ToLower().Contains(filter))
     .ToListAsync();

最新更新