我正在使用一个存储库模式,该模式返回带有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>)
的类型参数无法从用法
答案 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();
}
}