【发布时间】:2016-12-25 06:01:32
【问题描述】:
我有以下通用查询(可能已经应用了选择):
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;
现在我想选择所有具有Condition 且至少被DBSet 的一个实体满足的Provider 实例:
List<Provider> providers = [...];
var matchingProviders = providers.Where(provider => queryable.Any(provider.Condition))
这个问题:我开始查询列表中的每个Provider 实例。我宁愿使用单个查询来实现相同的结果。由于性能存在问题,该主题尤为重要。如何使用Linq 语句或Expression Trees 使用单个查询来获得相同的结果并提高性能?
【问题讨论】:
-
这很大程度上取决于
provider.Condition是什么。如果 EF 可以将其转换为 sql 查询,那么您可以收集所有条件并在单个查询中使用它们——与queryable.Any(provider.Condition)相反。 -
我想使用的所有条件都可以被EF翻译成SQL查询
-
这很大程度上取决于
provider.Condition是什么。如果 EF 可以将其转换为 sql 查询,那么您可以收集所有条件并在单个查询中使用它们——与queryable.Any(provider.Condition)相反。
标签: c# asp.net entity-framework expression-trees iqueryable