【发布时间】:2021-11-25 05:10:52
【问题描述】:
问题的上下文:
我的数据库中有一个实体 (Person),它与另一个实体 (Phone) 存在一对多关系。
public class Person
{
[Key]
public int Id { get; set; }
.
.
.
[ForeignKey("PersonId")]
public virtual List<Phone> Phones { get; set; }
}
public class Phone
{
[Key]
public int Id { get; set; }
.
.
.
public string PhoneNumber { get; set; }
public int PersonId { get; set; }
public virtual Person Person { get; set; }
}
其次,我收到一个包含字符串列表的过滤器。
问题:
我正在尝试从数据库中获取至少具有与过滤器的任何电话号码匹配(通过类似)的电话号码的所有人员。
到目前为止,我已经尝试过:
var query = _dbContext.Person
.Include(x => x.PhoneNumbers)
.AsNoTracking();
.Where(x => x.Phones
.Any(y => filter.Phones
.Any(z => y.PhoneNumber.Contains(z))));
此查询引发错误:
无法翻译 LINQ 表达式 {my expression here}。以可翻译的形式重写查询,或通过插入对“AsEnumerable”、“AsAsyncEnumerable”、“ToList”或“ToListAsync”的调用显式切换到客户端评估。请参阅https://go.microsoft.com/fwlink/?linkid=2101038 了解更多信息。”
谢谢!
【问题讨论】:
-
您不能在内存中集合上使用 EF Core LINQ 运算符,
Contains方法除外。filter.Phones.Any不可翻译。在这种情况下,只有动态谓词构建才能有所帮助。
标签: c# .net entity-framework linq