C# 使用EntityFramework包含类型
在我的查询中,我需要包括一个实体列表(以避免延迟加载)C# 使用EntityFramework包含类型,c#,entity-framework,linq-to-sql,C#,Entity Framework,Linq To Sql,在我的查询中,我需要包括一个实体列表(以避免延迟加载) query.Include(x => x.ActionValues.Select(a => a.ActionValueDetails)); 这项工作没有任何问题,但在某些情况下,我需要另一个渴望加载的ActionValueDetail属性。ActionValueDetail是许多其他it实现的基类。对于这些情况,我的代码如下所示: query.Include(t => t.ActionValues.Select(a =&
query.Include(x => x.ActionValues.Select(a => a.ActionValueDetails));
这项工作没有任何问题,但在某些情况下,我需要另一个渴望加载的ActionValueDetail属性。ActionValueDetail是许多其他it实现的基类。对于这些情况,我的代码如下所示:
query.Include(t => t.ActionValues.Select(a => a.ActionValueDetails.OfType<ActionValueDetailSpecial>().Select(d => d.SpecialDetail)));
query.Include(t=>t.ActionValues.Select(a=>a.ActionValueDetails.OfType().Select(d=>d.SpecialDetail));
但这总是抛出一个例外
包含路径表达式必须引用在类型上定义的导航属性。使用虚线路径作为参考导航属性,选择运算符作为集合导航属性
我不知道如何解决这个问题。
在这种情况下,使用延迟加载或投影不是我的选择。对于非常大的导出,我们需要这样做,以确保在写入流之前加载所有数据
任何帮助都会很好 您不能有条件地加载内容。你要么得到全部,要么一个也得不到。也许您以后可以在select中筛选结果?我不想筛选“ActionValueDetails”。一些ActionValueDetail实现有一些进一步的相关实体。在某些情况下,我需要加载这些相关的实体。但我认为我必须使用另一种策略来实现这一点。但是谢谢。无论如何:)
的类型是过滤;-)是的,好吧,你说得对!:)Sorry我认为您可以通过对两个单独的查询进行.Union()来解决这个问题,一个是加载所有对象(即您已经拥有的对象),另一个是显式包含ActionValueDetailSpecial和realted属性的查询。