C# 实体框架:过滤导航属性数据
我正在努力使用ASPs MVC模型/实体框架。我是个新手,所以这主要是个问题。我有3个链接在一起的数据库表:C# 实体框架:过滤导航属性数据,c#,.net,linq,entity-framework,lazy-loading,C#,.net,Linq,Entity Framework,Lazy Loading,我正在努力使用ASPs MVC模型/实体框架。我是个新手,所以这主要是个问题。我有3个链接在一起的数据库表: 计划 舞台 复合文件 每个阶段都链接到一个项目(在project表中)和Compfiles表中的数百个文件 我正在尝试构建一个报告,该报告将显示给定项目编号(PrjNo)的所有阶段和计算机文件 我正在使用以下代码填充我的模型: var stageFiles = db.Stages.Where(c => c.PrjNo == PrjNo) .Include(c =
- 计划
- 舞台
- 复合文件
project
表中)和Compfiles
表中的数百个文件
我正在尝试构建一个报告,该报告将显示给定项目编号(PrjNo
)的所有阶段和计算机文件
我正在使用以下代码填充我的模型:
var stageFiles = db.Stages.Where(c => c.PrjNo == PrjNo)
.Include(c => c.Project)
.Include(c => c.Compfiles);
return View(stageFiles.ToList());
表Compfiles
有一列IsLatest
,我只想显示IsLatest=1
的结果
如何根据
c.Compfiles
中的内容筛选.Include(c=>c.Compfiles)
位?实体框架不支持基于条件的Include()
,一旦包含某些导航属性,将从数据库中获取整个(相关)数据
您还需要认识到,Include()
只是指示EF预取相关数据,它与查询条件无关
但是,如果您要创建一个自定义类型来包装所有必需的(报告)字段,然后使用投影仅获取相关数据,则可以轻松地缓解此问题。例如:
public class StageReportData
{
// Stage primary-key
public int Id { get; set; }
// More Stage data that is needed for the report
// ...
public Project Project { get; set; }
public IEnumerable<Compfile> Compfiles { get; set; }
}
更多关于Try.Include(c=>c.Compfiles)的信息,其中(x=>x.IsLatest==1);非常感谢。我试试这个
var stageFiles = db.Stages
.Where(c => c.PrjNo == PrjNo)
.Select(x => new StageReportData
{
Id = x.Id,
Project = x.Project,
Compfiles = x.Compfiles.Where(c => c.IsLatest == 1)
});