我有以下型号:
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 标题, 显示顺序, 可用, 关键字
答案 0 :(得分:0)
我认为您不能在Include
方法中使用匿名类型。您可以引用要预加载的导航属性,但不能引用属性的投影到匿名类型。如果问题是Content
要加载很重,而且大多数时候你不需要它,你可以将表映射到两个不同的实体HelpArticle
和Content
并导航{{ 1}}在需要时获取HelpArticle.Content
(在EF 6.1中加载延迟)。 EF有一个名为Table Splitting的功能,顾名思义,这允许将一个数据库表映射(拆分)到概念模型中的多个类。