【发布时间】:2013-11-15 17:25:14
【问题描述】:
给定以下基本结构
public class Project
{
public int ProjectId {get;set;}
ICollection<SubProject> SubProjects {get;set;}
}
public class SubProject
{
public int SubProjectId {get;set;}
public int SubProjectId {get;set;}
public int PrinterId {get;set;}
public int AgencyId {get;set;}
public int Status
//Oodles more properties
}
public class ProjectSearchResult
{
public int ProjectId {get;set;}
public int NoOfSubProjects {get;set;}
//Loads more properties
}
我需要获取项目列表和他们拥有多少子项目的计数,有时按代理商,有时按打印机,有时按状态,
而不是像下面那样做
public IQueryable<ProjectSearchResult> GetProjects(int? status, int? agencyId, int? printerId)
{
var projects = db.Projects.Include(x=>x.SubProjects);
if(status.HasValue)
return projects.Select(proj=> new ProjectSearchResult
{
ProjectId = proj.ProjectId,
NoOfSubProjects = proj.SubProjects.Count(s=>s.Status = status)
};
if(agency.HasValue)
return projects.Select(proj=> new ProjectSearchResult
{
ProjectId = proj.ProjectId,
NoOfSubProjects = proj.SubProjects.Count(s=>s.AgencyId= agency)
};
if(printer.HasValue)
return projects.Select(proj=> new ProjectSearchResult
{
ProjectId = proj.ProjectId,
NoOfSubProjects = proj.SubProjects.Count(s=>s.PrinterId= printer)
};
有什么方法可以使它更通用并保留为IQueryable,而不返回所有子项目并在内存中进行计数?
【问题讨论】:
标签: c# .net entity-framework iqueryable