Повторное использование условия «Где» - PullRequest
0 голосов
/ 10 января 2020

У меня следующий запрос каркаса сущностей:

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));

Я использую это условие Где очень часто ...

Возможно ли определить условие в каком-либо виде и повторно использовать его в различные запросы:

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

Я думал об использовании Expression and Fun c ...

Проблема в том, что условие использует DbContext (_context).

1 Ответ

1 голос
/ 10 января 2020

Похоже, что адресная таблица имеет отношение 1: M к таблицам Users, Books и Shops. Предполагая, что сущность Address имеет коллекции Users, Books и Shops, вы можете использовать !address.Users.Any(), чтобы найти адреса без совпадающего User et c.

. Вы можете извлечь всю операцию в функцию, которая получает исходный IQueryable, применяет оператор Where и возвращает новый IQueryable, например:

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