使用Entity Framework Core获取动态列

时间:2018-02-05 02:19:52

标签: c# linq entity-framework-core

我正在使用一个存储库模式,该模式返回带有Entity Framework Core 2的IEnumerables,并希望实现一个get方法,该方法采用逗号分隔的列名字符串,并返回仅包含这些列的实体列表。我想限制来自数据库的数据量(很高兴)但更重要的是我需要限制从REST api到浏览器的数据量。

看起来像nuget包EntityFramework.DynamicLinq是要走的路。我可以从Github Link的文档中了解最佳信息。

我应该可以这样做:

using EntityFramework.DynamicLinq

public class CompanyRepository
{
    public async Task<IEnumerable<Company>> Get(string columns)
    {
    return await _dbSet.AsNoTracking().Select("new(" + columns + ")").ToListAsync();
    }
}

不幸的是,为Select调用提供了以下错误:

  

方法Enumerable.Select<TSource, TResult>(IEnumerable<TSource>, Func<TSource, TResult>)的类型参数无法从用法

中推断出来

1 个答案:

答案 0 :(得分:1)

我明白了。我导入了错误的命名空间,而Select必须包含对象类型:

using System.Linq.Dynamic.Core;

public class CompanyRepository
{
    public async Task<IEnumerable<Company>> Get(string columns)
    {
    return await _dbSet.AsNoTracking().Select<Company>("new(" + columns + ")").ToListAsync();
    }
}