我正在使用实体框架,并且必须查询"项目"属性很多,它有很多属性,必须包含在查询中,使查询膨胀:
var project = await this.ProjectRepository.GetRaw().Where(x => x.ID == id).Include(x => x.Leader).Include(x => x.Users).Include(x => x.Firm).FirstOrDefaultAsync();
请注意,GetRaw()不会返回IQueryable
有没有办法构建一些辅助方法,其中"包括"部分被添加,而我动态传递其余的查询?
类似的东西:
public async Task<List<Project>> GetProjects(query)
{
return this.ProjectRepository.GetRaw().Include(x => x.Leader).Include(x => x.Users).Include(x => x.Firm) + query;
}
使用类似的东西:
public ProjectController
{
public void Test()
{
var result = GetProjects.Where(x => x.ID == 0).FirstOrDefaultAsync();
}
}
答案 0 :(得分:2)
我认为它看起来应该更像这样:
public ObjectQuery<Project> GetProjects()
{
return this.ProjectRepository.GetRaw()
.Include(x => x.Leader)
.Include(x => x.Users)
.Include(x => x.Firm);
}
用法看起来像这样:
var result = GetProjects().Where(x => x.ID == 0).FirstOrDefaultAsync();
答案 1 :(得分:1)
您可以将表达式创建为参数并将其作为IQueryable<T>
返回,以便其他查询可以继续。
public IQueryable<Project> GetProjects(Expression<Func<Project, bool> query)
{
return this.ProjectRepository.GetRaw()
.Include(x => x.Leader)
.Include(x => x.Users)
.Include(x => x.Firm)
.Where(query);
}
使用。
var project = await GetProjects(x => x.ID == 0).FirstOrDefaultAsync();