LINQ2Entities&AutoMapper:在已转换的IQueryable上执行“跳过”和“跳过”联接所有导航表

时间:2018-11-14 10:13:38

标签: c# entity-framework automapper

我目前正在将AutoMapper与显式映射的字段一起使用,并且还可能与LINQ结合到实体进行分页。我感兴趣的代码部分如下:

        var result = page.ApplyPaging(query)
            .AsQueryable()
            .Project()
            .To<TDto>(null, membersToMap)
            .ToList();

分页通过以下方式完成:

    public IEnumerable<T> ApplyPaging<T>(IEnumerable<T> source)
    {
        if (!PagingEnabled)
        {
            return source;
        }

        var skippedEntries = (PageNumber.GetValueOrDefault(1) - 1) * PageSize;
        var result = source.Skip(skippedEntries).Take(PageSize);

        return result;
    }

现在有趣的是:通过此实现,将忽略MembersToMap Array,并且AutoMapper联接所有导航表,从而破坏了巨大的SQL查询。我不明白的地方:如果我将分页更改为:

    public IQueryable<T> ApplyPaging2<T>(IQueryable<T> source)
    {
        if (!PagingEnabled)
        {
            return source;
        }

        var skippedEntries = (PageNumber.GetValueOrDefault(1) - 1) * PageSize;
        var result = source.Skip(skippedEntries).Take(PageSize);

        return result;
    }

并删除.AsQueryable,AutoMapper只会获取所需的表。可能我错过了一个关键的难题,但是据我所知,如果基础列表已经是IQueryable,则通过AsQueryable更改编译时类型不应更改任何行为。 因此,这是AutoMapper问题还是我错过了使用从IQueryable转换为IEnumerable并返回的可能性?

0 个答案:

没有答案