C# 在谓词之前使用.Load()语句,还是在.Include()语句之后只调用我的谓词,哪个性能更好?

C# 在谓词之前使用.Load()语句,还是在.Include()语句之后只调用我的谓词,哪个性能更好?,c#,sql-server,asp.net-core,entity-framework-core,C#,Sql Server,Asp.net Core,Entity Framework Core,我有一个性能问题,我想知道我是否正确 首先我打电话: public async Task<IEnumerable<TEntity>> FindByConditionAsync(Expression<Func<TEntity, bool>> expression, bool AsNoTracking = true, params string[] includes) { var set = dbSet.AsQueryable();

我有一个性能问题,我想知道我是否正确

首先我打电话:


public async Task<IEnumerable<TEntity>> FindByConditionAsync(Expression<Func<TEntity, bool>> expression, bool AsNoTracking = true, params string[] includes)
{
    var set = dbSet.AsQueryable();
    if (AsNoTracking)
        set = dbSet.AsNoTracking();
    if (includes != null)
    {
        foreach (var include in includes)
        {
            if (include != null)
                set = set.Include(include);
        }
    }
    var data = set.Where(expression);
    return await data.ToListAsync();
}


不,这将在不使用谓词(!)的情况下进行查询,然后在另一次使用它。我通常不会在谓词之前使用
。Load()
,但我正在进行压力测试,我正在测试所有其他选项,谢谢。您是否对其进行了基准测试?使用秒表,检查结果。问题可能是数据表是否包含大量数据?“响应时间超过2秒。”您的意思是执行FindByConditionAsync方法将花费2秒,请尝试添加计时器进行检查?

public async Task<IEnumerable<TEntity>> FindByConditionAsync(Expression<Func<TEntity, bool>> expression, bool AsNoTracking = true, params string[] includes)
{
    var set = dbSet.AsQueryable();
    if (AsNoTracking)
        set = dbSet.AsNoTracking();
    if (includes != null)
    {
        foreach (var include in includes)
        {
            if (include != null)
                set = set.Include(include);
        }
    }
    await set.LoadAsync();//here

    var data = set.Where(expression);
    return await data.ToListAsync();
}