我正在尝试让Entity Framework选择一个对象并同时过滤其集合。我有一个JobSeries对象,其中包含一系列作业,我需要做的是按ID选择一个作业系列并通过SendDate过滤所有作业,但我不敢相信这个简单查询有多难!
这是有效的基本查询:
var q = from c in KnowledgeStoreEntities.JobSeries
.Include("Jobs.Company")
.Include("Jobs.Status")
.Include("Category")
.Include("Category1")
where c.Id == jobSeriesId
select c;
任何帮助都会受到赞赏,我一直试图在谷歌找到一些东西,我想做的是:http://blogs.msdn.com/bethmassi/archive/2009/07/16/filtering-entity-framework-collections-in-master-detail-forms.aspx
虽然它在VB.NET中,但我无法将其转换为C#。
编辑:我现在已经尝试过了,它不起作用!: var q = from c in KnowledgeStoreEntities.JobSeries
.Include("Jobs")
.Include("Jobs.Company")
.Include("Jobs.Status")
.Include("Category")
.Include("Category1")
where (c.Id == jobSeriesId & c.Jobs.Any(J => J.ArtworkId == "13"))
select c;
由于
丹
答案 0 :(得分:9)
Include
会引入性能问题。延迟加载保证引入性能问题。投影既便宜又简单:
var q = from c in KnowledgeStoreEntities.JobSeries
where c.Id == jobSeriesId
select new
{
SeriesName = c.Name,
Jobs = from j in c.Jobs
where j.SendDate == sendDate
select new
{
Name = j.Name
}
CategoryName = c.Category.Name
};
显然,我猜的是这些名字。但请注意:
Include
和其他地方)指定数据。关键是在LINQ中思考,而不是在SQL中或在实现整个实体时,没有充分理由像使用旧的ORM那样。
答案 1 :(得分:-1)
我很久就放弃了.Include()
并实施了Lazy loading for Entity Framework