【问题标题】:Eager loading with condition有条件的急切加载
【发布时间】:2013-04-28 15:48:57
【问题描述】:

我对在实体框架中进行预加载有疑问。

我有两个表 ScrappyTemplate 和 ScarppyTemplateFields,表之间的关系是一对多的。请注意,这两个表都有 IsActive 标志

我想从 IsActive==True 的 ScrappyTemplate 和 ScrappyTemplateFields 中获取数据,我使用下面的代码通过预加载获取数据

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

我得到了结果集,这是不对的!!,我想得到子表的结果集,即 IsActive=true 的 ScrappyTemplateFields,但它返回所有行而不考虑 IsActive 标志。

请任何人帮助我,如何在子表中放置条件。

提前致谢

【问题讨论】:

    标签: linq entity-framework linq-to-sql entity-framework-4


    【解决方案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);
           }
    

    【讨论】:

    • 谢谢Khanh,解决方案似乎有效,但无论如何我可以使用实际实体而不是使用匿名类型
    • 恐怕没有别的办法了。让我们看看有没有其他人有办法。
    • 我终于实现了,将 Anonymous 转换为 Actual 类型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-08
    • 1970-01-01
    相关资源
    最近更新 更多