在方法中提取时 EF Core 忽略条件
EF Core ignoring condition when extracted in method
从
中提取 IQueryable 上的简单 Linq2Entity 条件后
orders = orders.Where(o => o.AddressId.HasValue && _validAddressIds.Contains(o.AddressId.Value));
像这样的方法:
orders = orders.Where(o => IsValidAddress(o.AddressId));
...
private bool IsValidAddress(long addressId)
{
return adressId.HasValue && _validAddressIds.Contains(addressId);
}
条件不再包含在生成的 SQL 中,它仅在内存中应用。这是为什么???
我们必须使用这样的表达式:
public Expression<Func<T, bool>> GetFilteredAddressExpression<T>() where T : IAddress
{
return x => x.AddressId != null && _validAddressIds.Contains(x.AddressId.Value);
}
从
中提取 IQueryable 上的简单 Linq2Entity 条件后orders = orders.Where(o => o.AddressId.HasValue && _validAddressIds.Contains(o.AddressId.Value));
像这样的方法:
orders = orders.Where(o => IsValidAddress(o.AddressId));
...
private bool IsValidAddress(long addressId)
{
return adressId.HasValue && _validAddressIds.Contains(addressId);
}
条件不再包含在生成的 SQL 中,它仅在内存中应用。这是为什么???
我们必须使用这样的表达式:
public Expression<Func<T, bool>> GetFilteredAddressExpression<T>() where T : IAddress
{
return x => x.AddressId != null && _validAddressIds.Contains(x.AddressId.Value);
}