У меня есть следующий общий запрос (который уже может быть применен):
IQueryable<TEntity> queryable = DBSet<TEntity>.AsQueryable();
Тогда существует класс Provider
, который выглядит следующим образом:
public class Provider<TEntity>
{
public Expression<Func<TEntity, bool>> Condition { get; set; }
[...]
}
Condition
может быть определен для каждого экземпляра следующим образом:
Condition = entity => entity.Id == 3;
Теперь я хочу выбрать все экземпляры Provider
, у которых есть Condition
, который встречается хотя бы одним объектом DBSet
:
List<Provider> providers = [...];
var matchingProviders = providers.Where(provider => queryable.Any(provider.Condition))
Проблема с этим: я запускаю запрос для каждого экземпляра Provider
в списке. Я бы предпочел использовать один запрос для достижения того же результата. Эта тема особенно важна из-за сомнительной производительности. Как добиться одинаковых результатов с помощью одного запроса и повысить производительность с помощью операторов Linq
или Expression Trees
?