重用 Where 条件

Reuse a Where condition

我有以下 entity framework 查询:

IQueryable<Address> addresses = _context.Addresses
  .Where(x => 
    !(_context.Users.Any(y => y.AddressId == x.Id)) &&
    !(_context.Books.Any(y => y.AddressId == x.Id) &&
    !(_context.Shops.Any(y => y.AddressId == x.Id));

我经常使用这个 Where 条件...

是否可以以某种方式定义条件并在不同的查询中重用它:

IQueryable<Address> addresses = _context.Addresses.Where(AddressCondition);

我正在考虑使用 Expression 和 Func ...

问题是条件使用了DbContext(_context)。

看起来地址 table 与用户、图书和商店 table 有 1:M 关系。假设地址实体有用户、书籍和商店集合,您可以使用 !address.Users.Any() 来查找没有匹配用户等的地址。

您可以将整个操作提取到接收原始 IQueryable、应用 Where 运算符和 returns 新 IQueryable 的函数中,例如:

IQueryable<Address> OrphanedOnly(IQueryable<Address> query)
{
    return query.Where(address=>!address.Users.Any() &&
                                !address.Books.Any() &&
                                !address.Shops.Any());
}