我对实体框架中的热切加载有疑问。
我有两个表ScrappyTemplate和ScarppyTemplateFields,表之间的关系是一对多。请注意,这两个表都有IsActive标志
我想从ScrappyTemplate和ScrappyTemplateFields中获取数据,其中IsActive == True,我使用以下代码通过预先加载来获取数据
using (Entities entities = new Entities())
{
var content = entities.ScrappyTemplates.Include(entities.GetTableName<ScrappyTemplateField> (false)).Where(c => c.ContentSourceId == contentSourceId && c.IsActive == true && c.ScrappyTemplateFields.Any(d=>d.IsActive==true)).ToList<ScrappyTemplate>();
}
我得到了结果集,这是不对的!!,我想获得Child表的结果集,即ScrappyTemplateFields,其中IsActive = true,但它返回所有行,并且相应的IsActive标志。
请任何人帮助我,如何在Child表中添加条件。
提前致谢
答案 0 :(得分:1)
.Include()不允许对相关实体进行过滤。试试这个:
using (Entities entities = new Entities())
{
var query = from template in entities.ScrappyTemplates
where template.ContentSourceId = contentSourceId && template.IsActive = true && template.ScrappyTemplateFields.Any(d=>d.IsActive==true)
select new {
Template = template,
TemplateFields = template.ScrappyTemplateFields.Where(d=>d.IsActive==true)
};
var content = query.ToList().Select(t=>t.Template);
}