对从db加载的内存集合与对db的查询进行排序和过滤

时间:2019-03-02 09:22:16

标签: asp.net sql-server entity-framework razor asp.net-core

我不确定当前遇到的情况推荐哪种方法。基本上,当我加载Razor页面时,我是从数据库中返回一个用户列表,稍后我要按价格进行排序或按特定的参数进行过滤。目前,数据是从List<MyEntity>数据库中加载的。

我正在尝试找出哪种方法更好,为什么:

  1. 针对每个排序/过滤器对数据库执行查询,这似乎对数据库有很多潜在的查询。

  2. 在获取模型时,对我最初填充的列表执行排序和过滤。例如。创建一个采用List<MyEntity>并对其进行排序的方法,如下所示:

    public List<MyEntity> OrderMyEntitiesByPriceAsc(List<PetGuardian> 
    toOrder)
    {
        return toOrder.OrderBy(g => g.Price).ToList();
    }
    

然后选择订购选项并提交表格,该方法就会执行。

在Razor页面模型中,我正在按以下方式加载所有实体:

剃刀页面模型:

    public async Task OnGet()
    {
        MyEntities = await _myEntityRepository.GetAllAsync();
    }

存储库:

    public IQueryable<T> GetAll()
    {
        return _dbContext.Set<T>().AsQueryable();
    }

    public async Task<List<T>> GetAllAsync()
    {
        return await GetAll().ToListAsync();
    }

选项2似乎会从额外的查询中省去数据库,但是我不确定排序的异步实现是否正确和良好的做法。两种方法都可以完成工作,我只是想知道您将使用哪个以及为什么。

public Task<List<MyEntity>> OrderMyEntitiesPriceAsc(List<MyEntity> toSort)
{
    return toSort.AsQueryable().OrderBy(g => g.Price).ToListAsync();
}

0 个答案:

没有答案