我可以将此查询更改为方法吗?

时间:2014-08-26 10:15:41

标签: linq entity-framework

我正在使用实体框架,并且必须查询"项目"属性很多,它有很多属性,必须包含在查询中,使查询膨胀:

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();
  }
}

2 个答案:

答案 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();
相关问题