从模型

时间:2017-03-17 16:31:22

标签: c# asp.net entity-framework asp.net-core-mvc entity-framework-core

我有以下型号:

   public class HelpApplication  {  
    public int Id { get; set; }
    public string ApplicatonName { get; set; }     
    public int DisplayOrder { get; set; }  
    public bool Available { get; set; }
    public ICollection<HelpArea> HelpAreas { get; } = new List<HelpArea>();
}

public class HelpArea {
    public int Id { get; set; }
    public string AreaName { get; set; }
    public int DisplayOrder { get; set; }
    public bool Available { get; set; }
    public int ApplicationId { get; set; }
    public virtual HelpApplication HelpApplication { get; set; }
    public ICollection<HelpTopic> HelpTopics { get; } = new List<HelpTopic>();
}

public class HelpTopic  {
    public int Id { get; set; }
    public string Title { get; set; }
    public int DisplayOrder { get; set; }
    public string Content { get; set; }
    public bool Available { get; set; }

    public int AreaId { get; set; }
    public virtual HelpArea HelpArea { get; set; }

    public ICollection<HelpArticle> HelpArticles { get; } = new List<HelpArticle>();
}

 public class HelpArticle {
    public int Id { get; set; }
    public string Title { get; set; }
    public int DisplayOrder { get; set; }
    public string Content { get; set; }
    public string Keywords { get; set; }
    public bool Available { get; set; }
    public int HelpfulYes { get; set; }
    public int HelpfulNo { get; set; }
    public int TopicId { get; set; }
}

我希望使用类似下面的查询,使用HelpArticles,我只需要3个属性。除非需要,我不需要一直拉Content(A CLOB)。

this.Entities
            .Include(h => h.HelpTopics)
            .ThenInclude(s => s.HelpArticles.Select(t => new { t.Title, t.Keywords, t.DisplayOrder} ))
            .Where(h => h.ApplicationId == appId).ToList();

以上查询返回异常:

  

属性表达式's =&gt; {来自s.HelpArticles中的HelpArticle t选择new&lt;&gt; f__AnonymousType12`3(Title = [t] .Title,Keywords = [t] .Keywords,DisplayOrder = [t] .DisplayOrder)}'无效。   表达式应代表属性访问:'t =&gt; t.MyProperty”。

我想退回以下内容:

HelpApplication 中的所有属性;

HelpTopic收藏 标题, 显示顺序, 可用的,

HelpArticle Collection 标题, 显示顺序, 可用, 关键字

1 个答案:

答案 0 :(得分:0)

我认为您不能在Include方法中使用匿名类型。您可以引用要预加载的导航属性,但不能引用属性的投影到匿名类型。如果问题是Content要加载很重,而且大多数时候你不需要它,你可以将表映射到两个不同的实体HelpArticleContent并导航{{ 1}}在需要时获取HelpArticle.Content(在EF 6.1中加载延迟)。 EF有一个名为Table Splitting的功能,顾名思义,这允许将一个数据库表映射(拆分)到概念模型中的多个类。